C#文件讀寫方法總結

1、File 同FileInfo比較(Directory 和DirectoryInfo類似)
Directory 類和File類只包含靜態方法,不能被實例化。只要調用一個成員方法,提供合適文件系統對象的路徑,就可以使用這些類。如果只對一個文件夾或者文件執行一個操作,使用這些類就很有效,因爲這樣可以省去創建.NET對象的系統開銷。
DirectoryInfo類和FileInfo類實現與Directory 類和File類大致相同的公共方法,並擁有一些公共屬性和構造函數,但它們都是有狀態的,並且這些類的成員都不是靜態的。需要實例化這些類,之後把每個實例與特定的文件夾或者文件關聯起來。如果使用同一個對象執行多個操作,使用這些類就比較有效。這是因爲在構造時它們將讀取合適文件系統對象的身份驗證和其他信息,無論每個對象(類實例)調用了多少方法,都不需要再次讀取這些信息。比較而言,在調用買個方法時,相應的無狀態類需要再次檢查文件或文件夾的詳細內容。
2、File類的ReadAllText()和WriteAllText()方法
File.WriteAllText 創建一個新文件,向其中寫入內容,然後關閉文件。 如果目標文件已存在,則覆蓋該文件。
File.ReadAllText 打開一個文本文件,將文件中的所有文本讀取到一個字符串中,然後關閉此文件。
3、
Example 1: File.ReadAllLines()

string[] lines = File.ReadAllLines("C:\\mytxt.txt");

Example 2: File.ReadLines()

foreach (var line in File.ReadLines("C:\\mytxt.txt"))
{
   //Do something     
}

ReadAllLines可以對每一行執行不同的處理,但仍需要將完整的文件讀入內存
要進行逐行讀取,無須等待所有行都讀取完,可以使用方法File.ReadLines(),在讀取完整個文件之前,就可以遍歷它。
4、小的文本文件(100M以下)直接用File類的**ReadAllText()和WriteAllText()**方法
這兩個方法內部其實就是封裝了StreamReader類的ReadToEnd()和StreamWriter類的WriteToEnd(),
這兩個方法的返回值都是string類型,所以只能讀寫文本文件
5、File類的ReadAllBytes()和WriteAllBytes()
File.ReadAllBytes打開一個二進制文件,將文件的內容讀入一個字節數組,然後關閉該文件。因爲可以讀取到每個字節 所以可以處理所有類型的文件
File.WriteAllBytes創建一個新文件,在其中寫入指定的字節數組,然後關閉該文件。 如果目標文件已存在,則覆蓋該文件。
小的非文本文件用File類的ReadAllBytes()和WriteAllBytes()讀寫,並用byte[]作中轉站
這兩個方法內部其實就是封裝了FileStream的Read()和Write()方法,
這兩個方法的返回值都是byte數組,所以可以讀寫任何文件
5、流的分類
System.IO.MemoryStream實現對內存進行數據讀寫的功能,而不是對持久性存儲器進行讀寫。常作爲其他流數據交換時的中間對象操作。
NetWorkStream對象處理網絡數據
Stream類對外部數據源不做任何假定,外部數據源可以是文件流、內存流、網絡流或任意數據源。
6、與流相關的類的層次結構如圖所示:
在這裏插入圖片描述
常用的類如下:
1、FileStream文件流——這個類主要用於在二進制文件中讀寫二進制數據。
2、StreamReader(流讀取器)和StreamWriter(流寫入器)這兩個類專門用於文本格式的流產品API
3、BinaryReader和BinaryWriter這兩個類專門用於讀寫二進制格式的流產品API.
備註:FileStream對象表示在磁盤或網絡路徑上指向文件的流。當類提供向文件讀寫字節的方法時,經常使用StreamReader或StreamWriter執行這些功能。這是因爲FileStream類操作字節和字節數組,而Stream類操作字符數據。字符數據易於使用,但是有些操作比如隨機文件訪問(訪問文件中間某點的數據),就必須由FileStream對象執行。
使用時需要創建對象,FileStream類既可以對文本文件進行讀也可以對多媒體文件進行寫,以字節數組的形式進行讀和寫,多用於對大文件進行讀寫,區別於File類的是它對文件可進行分步讀寫,減小內存壓力。StreamReader和StreamWriter類多用於對小文件讀寫。

//FileStream寫文件
 string path = @"D:\test.txt";
 string content = @"這裏是新添加的內容";
 byte[] theStr = Encoding.UTF8.GetBytes(content);
 using (var file = new FileStream(path, FileMode.Append))
 {
     file.Write(theStr, 0, theStr.Length);
 }

讀文件
//FileStream讀文件

  string path = @"D:\test.txt";
  using (var file = new FileStream(path, FileMode.Open))
  {
      var length = file.Length;
      var bytes = new byte[length];
      int r = file.Read(bytes, 0, bytes.Length);
      var str = Encoding.UTF8.GetString(bytes);
  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章