利用C#進行文件讀寫的方法選擇總結


小的文本文件(100M以下)直接用File類的ReadAllText()和WriteAllText()方法
這兩個方法內部其實就是封裝了StreamReader類的ReadToEnd()和StreamWriter類的WriteToEnd(),
這兩個方法的返回值都是string類型,所以只能讀寫文本文件

小的文本文件的單行讀寫用StreamReader和StreamWriter這兩個類

小的非文本文件用File類的ReadAllBytes()和WriteAllBytes()讀寫,並用byte[]作中轉站
這兩個方法內部其實就是封裝了FileStream的Read()和Write()方法,
這兩個方法的返回值都是byte數組,所以可以讀寫任何文件

大文件
但File讀寫特大文件是會出錯的,因為它雖然本質上用的是FileStream來讀寫,但是它的byte[]大小是寫死了的(就是被讀寫文件的大小),所以它是將文件一次性全部讀取或寫入,文件非常大的時候往往會造成內存溢出
所以要用數據流FileStream,因為我們可以自由定義byte[]的大小,來保證內存不會溢出

一般而言,讀文件用FileMode.Open,寫文件用FileMode.Create
FileStream的Position屬性是一個指針,標記文件流當前讀寫的位置
代碼實現:

 1 using (FileStream fsRead = new FileStream(@"D:\Names.txt", FileMode.Open))
 2 {
 3 using (FileStream fsWrite = new FileStream(@"d:\temp.txt", FileMode.Create))
 4 {
 5 byte[] arr = new byte[200];
 6 //記錄到底讀取了多少字節的數據
 7 int count = 0;
 8 while (fsRead.Position < fsRead.Length)
 9 {
10 //每一次讀取,。返回真正讀取到的字節數,用count記錄(最后一次讀取后可能count可能會小於200)
11 count = fsRead.Read(arr, 0, arr.Length);
12 //將數組中的數據寫入到指定的文件
13 fsWrite.Write(arr, 0, count);
14 }
15 }
16 MessageBox.Show("ok");
17 }

 

總結:

首先看文件大小——如果是大文件則用FileStream,如果是小文件則看是否是文本文件——非文本文件則用File類的ReadAllBytes/WriteAllBytes,是文本文件則看是否是單行讀寫——是則用StreamReader類/StreamWriter類,不是則用File類的ReadAllText/WriteAllText

另,任意類型的文件都可以用FileStream來讀寫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM