• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            Accessing Files and Directories

             

            Welcome to the next installment of the .NET Nuts & Bolts column. In this column we'll explore interacting with files from within .NET. The topics covered will include how to get the properties on files in a directory. It will involve using classes in the System.IO namespace.

            Working with Streams

            No, I haven't turned this into an article about the great outdoors. Streams have their place with computers as well, although I wouldn't recommend getting your computer near one of the traditional kind. Streams are a concept that have been around for a while, but that are new to Microsoft developers via .NET. A stream is a base class used to abstract the specifics of input and output from the underlying device(s). In general, streams support the ability to read or write. Some streams provide additional capabilities such as seek, which allows navigation forward to a specific location. The device could be a physical file, memory, or the network. List of classes that inherit from the Stream base class are as follows:

            • FileStream—read, write, open, and close files
            • MemoryStream—read and write managed memory
            • NetworkStream—read and write between network connections (System.Net namespace)
            • CryptoStream—read and write data through cryptographic transformations
            • BufferedStream—adds buffering to another stream that does not inherently support buffering

            While the streams are used to abstract the input and output from the device, the stream itself is not directly used to read and write data. Instead, a reader or writer object is used to interact with the stream and perform the physical read and write. Here is a list of classes used for reading and writing to streams:

            • BinaryReader and BinaryWriter—read and write binary data to streams
            • StreamReader and StreamWriter—read and write characters from streams
            • StringReader and StringWriter—read and write characters from Strings
            • TextReader and TextWriter—read and write Unicode text from streams

            Reading and Writing Text

            The following section will use StreamWriter, StreamReader, and FileStream to write text to a file and then read and display the entire contents of the file.

            Sample Code to Write and Read a File

            using System;
            using System.IO;
            
            namespace CodeGuru.FileOperations
            {
              /// <remarks>
              /// Sample to demonstrate writing and reading a file.
              /// </remarks>
              class WriteReadFile
              {
               /// <summary>
               /// The main entry point for the application.
               /// </summary>
               [STAThread]
               static void Main(string[] args)
               {
                 FileStream fileStream = null;
                 StreamReader reader = null;
                 StreamWriter writer = null;
            
                 try
                 {
                  // Create or open the file
                  fileStream = new FileStream("c:\\mylog.txt",
                     FileMode.OpenOrCreate,
                     FileAccess.Write);
                  writer = new StreamWriter(fileStream);
            
                  // Set the file pointer to the end of the file
                  writer.BaseStream.Seek(0, SeekOrigin.End);
            
                  // Force the write to the underlying file and close
                  writer.WriteLine(
                      System.DateTime.Now.ToString() + " - Hello World!");
                  writer.Flush();
                  writer.Close();
            
                  // Read and display the contents of the file one
                  // line at a time.
                  String fileLine;
                  reader = new StreamReader("c:\\mylog.txt");
                  while( (fileLine = reader.ReadLine()) != null )
                  {
                    Console.WriteLine(fileLine);
                  }
                 }
                 finally
                 {
                  // Make sure we cleanup after ourselves
                  if( writer != null ) writer.Close();
                  if( reader != null ) reader.Close();
                 }
               }
              }
            }

            Working with Directories

            There two classes for the manipulation of directories. The classes are named Directory and the DirectoryInfo. The Directory class provides static methods for directory manipulation. The DirectoryInfo class provides instance methods for directory manipulation. They provide the same features and functionality, so the choice comes down to whether you need an instance of an object or not. The members include, but are not limited to the following:

            • Create—create a directory
            • Delete—delete a directory
            • GetDirectories—return subdirectories of the current directory
            • MoveTo—move a directory to a new location

            Sample Code to Produce a List of All Directories

            The following sample code demonstrates the ability to produce a list of directories using recursion. A recursive procedure is one that calls itself. You must ensure that your procedure does not call itself indefinitely; otherwise, you'll eventually run out of memory. In this case, there are a finite number of subdirectories, so there is automatically a termination point.

            using System;
            using System.IO;
            
            namespace CodeGuru.FileOperations
            {
              /// <remarks>
              /// Sample to demonstrate reading the contents of directories.
              /// </remarks>
              class ReadDirectory
              {
               /// <summary>
               /// The main entry point for the application.
               /// </summary>
               [STAThread]
               static void Main(string[] args)
               {
                 DirectoryInfo dirInfo = new DirectoryInfo("c:\\");
                 Console.WriteLine("Root: {0}", dirInfo.Name);
                 ReadDirectory.ProduceListing(dirInfo, "  ");
                 Console.ReadLine();
               }
            
               /*
                * Recursively produce a list of files
                */
               private static void ProduceListing(DirectoryInfo dirInfo,
                                                  string Spacer)
               {
                 Console.WriteLine(Spacer + "{0}", dirInfo.Name);
                 foreach(DirectoryInfo subDir in dirInfo.GetDirectories())
                 {
                  Console.WriteLine(Spacer + Spacer + "{0}", subDir.Name);
                  if( subDir.GetDirectories().Length > 0 )
                  {
                    ProduceListing(subDir, Spacer + "  ");
                  }
                 }
               }
              }
            }

            Getting File Properties for Office Documents

            Microsoft has an ActiveX component that can be used to programmatically retrieve the summary properties (title, subject, etc.) for files such as Excel, Word, and PowerPoint. It has advantages because it does not use Office Automation so Microsoft Office does not have to be installed. This component can be used to produce a listing of files and their properties.

            Sample Code to Produce File Listing with Properties

            The following code will populate a DataTable with a list of files and their properties. The DataTable could be bound to a DataGrid or another display control as desired. Be sure you've added the appropriate reference to the dsofile.dll that exposes the file properties. Because this is a COM-based DLL, COM Interop will be used to interact with the DLL.

            // Setup the data table
            DataTable fileTable = new DataTable("Files");
            DataRow fileRow;
            fileTable.Columns.Add("Name");
            fileTable.Columns.Add("Title");
            fileTable.Columns.Add("Subject");
            fileTable.Columns.Add("Description");
            
            // Open the directory
            DirectoryInfo docDir = new DirectoryInfo("C:\\My Documents\\");
            if( !docDir.Exists )
            {
              docDir.Create();
            }
            
            // Add the document info into the table
            DSOleFile.PropertyReader propReader =
                   new DSOleFile.PropertyReaderClass();
            DSOleFile.DocumentProperties docProps;
            
            foreach(FileInfo file in docDir.GetFiles())
            {
              try
              {
               fileRow = fileTable.NewRow();
               docProps = propReader.GetDocumentProperties(file.FullName);
               fileRow["Name"] = file.Name;
               fileRow["Title"] = docProps.Title;
               fileRow["Subject"] = docProps.Subject;
               fileRow["Description"] = docProps.Comments;
               fileTable.Rows.Add(fileRow);
              }
              catch( Exception exception )
              {
               Console.WriteLine("Error occurred: " + exception.Message);
              }
            }
            propReader = null;
            this.DocumentGrid.DataSource = fileTable;
            this.DocumentGrid.DataBind();
            
            // Force cleanup so dsofile doesn't keep files locked open
            GC.Collect();

            Summary

            You now have seen several cursory ways in which the System.IO namespace can be used to interact with files and directories. We took an additional look to see how to use the dsofile additional DLL from Microsoft to show the properties for Microsoft Office documents.

            posted on 2005-11-23 12:24 夢在天涯 閱讀(565) 評論(0)  編輯 收藏 引用 所屬分類: C#/.NET

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804430
            • 排名 - 5

            最新評論

            閱讀排行榜

            久久久噜噜噜久久| 国产一区二区精品久久凹凸| 久久久久亚洲AV成人网人人网站 | 香蕉久久永久视频| 无码人妻久久久一区二区三区| 蜜臀久久99精品久久久久久小说 | 久久精品国产亚洲AV蜜臀色欲 | 日韩欧美亚洲综合久久| 久久精品无码专区免费东京热| 色成年激情久久综合| 亚洲精品无码久久不卡| 精品久久久久久国产潘金莲| 久久精品18| 婷婷久久综合九色综合98| 狠狠色丁香久久婷婷综合图片| 97久久久精品综合88久久| 综合人妻久久一区二区精品| 婷婷综合久久狠狠色99h| 日韩人妻无码一区二区三区久久 | 久久精品99无色码中文字幕| 久久精品水蜜桃av综合天堂| 欧美伊人久久大香线蕉综合| 国内精品免费久久影院| 久久久久人妻精品一区| 一本一道久久综合狠狠老| 久久久亚洲精品蜜桃臀| 国产精品一区二区久久精品无码| 久久精品国产99久久无毒不卡| 狠狠色丁香久久婷婷综合| 久久福利资源国产精品999| 久久婷婷人人澡人人| 精品久久人人爽天天玩人人妻 | 亚洲国产精品狼友中文久久久| 国产香蕉97碰碰久久人人| 91精品国产高清久久久久久国产嫩草 | 国产成人久久AV免费| 久久精品国产亚洲av麻豆小说 | 久久久噜噜噜久久中文字幕色伊伊| 久久中文字幕一区二区| 亚洲嫩草影院久久精品| 99久久国产综合精品成人影院|