• <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

            搜索

            •  

            積分與排名

            • 積分 - 1804303
            • 排名 - 5

            最新評論

            閱讀排行榜

            亚洲国产成人精品女人久久久 | 国产精品gz久久久| 国产V综合V亚洲欧美久久| 亚洲AV乱码久久精品蜜桃| 性欧美丰满熟妇XXXX性久久久| 久久精品国产男包| 久久精品国产亚洲av水果派| 久久无码人妻一区二区三区午夜| 久久国产精品久久精品国产| 国产亚洲美女精品久久久| 奇米影视7777久久精品人人爽 | 久久久无码精品亚洲日韩软件| 久久久精品久久久久久| 性做久久久久久久久浪潮| 成人久久免费网站| 9191精品国产免费久久| 久久久久久久久久久精品尤物| 精品久久久久久亚洲精品| 久久99精品久久久久久野外| 久久精品国产亚洲AV香蕉| 久久91精品国产91久久户| 日日狠狠久久偷偷色综合0| 久久久久久夜精品精品免费啦| 久久久久久噜噜精品免费直播| 欧美一区二区三区久久综| 精品久久久久久久久久中文字幕| 四虎国产精品成人免费久久| 久久精品国产精品亚洲精品| 精品多毛少妇人妻AV免费久久 | AV无码久久久久不卡蜜桃 | 亚洲精品午夜国产VA久久成人| 精品国产综合区久久久久久| 男女久久久国产一区二区三区| 亚洲精品tv久久久久| 国产综合精品久久亚洲| 久久精品国产精品青草| 婷婷五月深深久久精品| 99久久国产综合精品女同图片| 欧美亚洲另类久久综合婷婷| 国产亚洲精午夜久久久久久| 久久青青草原综合伊人|