文件操作、流相關類梳理

  平時很少用到文件操作和流,所以每次用的時候都是百度,不明不白,Copy過去就行了,中間也有去整理,由於沒有記筆記,用得少,一段時間又忘記了。這次來一次徹徹底底的梳理。

一、繼承關係圖

二、文件和文件夾操作類

  File和FileInfo:是文件操作類,可以對文件進行創建、修改、刪除、移動等,只要對文件能進行的操作都有提供。

  Directory和DirectoryInfo:是文件夾操作類,提供了創建、刪除、移動文件夾,獲取文件夾的子文件夾等。

  其中File和Directory都是靜態類。區別在於File和Directory在操作同一個文件/文件夾的時候,每次都會進行安全檢查。而FileInfo和DirectoreyInfo在操作同一個文件/文件夾的時間,只會檢查一次。

 三、Writer操作類

  Writer相關類:

    顧名思義,Writer相關類都是寫入到流、字符串中。下面幾種Writer就與之對應。

  3.1 BinaryWriter:

    構造函數需要傳遞Stream,而BinaryWriter就是將二進制寫入到此流中去,如果這個流是通過文件獲得,則文件就會寫到文件中。如果流通過內存獲得,就會寫入到內存中。

            byte[] data = new byte[10];
            using (BinaryWriter binaryWriter = new BinaryWriter(File.Open(@"c:\1.txt", FileMode.Create)))//流從文件中獲取,寫入流也就是寫入文件
            {
                binaryWriter.Write("a");
                binaryWriter.Write(56);
                binaryWriter.Write(false);
                binaryWriter.Write(data);
                binaryWriter.Write('b');
                binaryWriter.Flush();
            }

            using (MemoryStream memoryStream = new MemoryStream())//流從內存中獲取,寫入流也就是寫入內存中
            {
                BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
                binaryWriter.Write("a");
                binaryWriter.Write(56);
                binaryWriter.Write(false);
                binaryWriter.Write(data);
                binaryWriter.Write('b');
                binaryWriter.Flush();

                data = new byte[10];
                memoryStream.Seek(0, SeekOrigin.Begin);
                memoryStream.Read(data, 0, (int)memoryStream.Length);
            }

  3.2 StreamWriter:

    構造函數需要傳遞Stream或者文件路徑。跟BinaryWriter很像,主要方法也是Write方法,而且他的Write方法跟BinaryWriter一樣,它的寫入對象也是流。

            using (StreamWriter streamWriter = new StreamWriter(File.Open(@"c:\3.txt", FileMode.Create)))
            {
                streamWriter.Write("a");
                streamWriter.Write(56);
                streamWriter.Write(false);
                streamWriter.Write(data);
                streamWriter.Write('b');
                streamWriter.Flush();
            }

StreamWriter和BinaryWriter的區別:

   BinaryWriter:查看源碼可以看到,在寫入流之前,會將Int、Double、decimal、long、float的值轉爲字節數組,然後寫入文件流。在寫入string類型的,會將String類型變爲四個無符號整數,這就導致在打開二進制文本的時候前面多個0100 打開文本顯示的是ETO。BinaryWriter本質上將二進制寫入流中。

     StreamWriter:所見即所得。你寫入文件中流的內容,打開文件和你看到的一樣。而BinaryWriter寫入到文件,打開是會亂碼的。

   3.3 StringWriter:

    構造函數需要傳遞StringBuilder,將數據寫入到StringBuilder中。所以StringWriter只能對字符串操作。

四、Reader操作類

   跟Writer類似,相反,就不過多少了。

 

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章