FileStream類
小的文本文件(100M以下)直接用File類的ReadAllText()和WriteAllText()方法。這兩個方法內部其實就是封裝了StreamReader類的ReadToEnd()和StreamWriter類的WriteToEnd(),這兩個方法的返回值都是string類型,所以只能讀寫文本文件。
小的文本文件的單行讀寫用StreamReader和StreamWriter這兩個類。
小的非文本文件用File類的ReadAllBytes()和WriteAllBytes()讀寫,并用byte[]作中轉站。這兩個方法內部其實就是封裝了FileStream的Read()和Write()方法,這兩個方法的返回值都是byte數組,所以可以讀寫任何文件大文件,但File讀寫特大文件是會出錯的,因為它雖然本質上用的是FileStream來讀寫,但是它的byte[]大小是寫死了的(就是被讀寫文件的大小),所以它是將文件一次性全部讀取或寫入,文件非常大的時候往往會造成內存溢出,所以要用數據流FileStream,因為我們可以自由定義byte[]的大小,來保證內存不會溢出。
代碼示例:
using System; using System.IO; //引用命名空間 using System.Text; namespace ConsoleApp { class Program { static void Main(string[] args) { //FileStream 操作字節的,代表著可以操作任何類型的文件 //引用命名空間,創建一個FileStream對象 string path = @"C:\Users\Administrator\Desktop\Test.txt"; //使用FileStream來讀取數據 FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read); byte[] arr = new byte[1024 * 1024 * 5]; //5兆字節,讀取5兆 //返回本次實際讀取到的有效字節數,如果字節數當前不可用,則總字節數可能小于所請求的字節數;如果已到達流結尾,則為零。 int num = fs.Read(arr, 0, arr.Length); //從流中讀取字節塊并將該數據寫入給定緩沖區中。限制讀這個數組的長度,也就是5兆 //將字節數組中每一個元素按照指定的編碼格式解碼成字符串 string s = Encoding.Default.GetString(arr, 0, num); //關閉流 fs.Close(); //釋放流所占用的資源 fs.Dispose(); Console.WriteLine(s); Console.ReadKey(); } } }
string path = @"C:\Users\Administrator\Desktop\Test.txt"; //將創建文件流對象的過程寫在using當中,會自動的幫助我們釋放流所占用的資源。 //用FileStream來寫入數據 using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)) { string str = "文件不存在的時候會自動創建一個文件,存在的時候我這部分已經覆蓋你了"; byte[] arr = Encoding.Default.GetBytes(str); fs.Write(arr, 0, arr.Length); } Console.WriteLine("寫入成功"); Console.ReadKey();
運行結果:
總結:香蕉视频app大文件使用FileStream,小文件則看是否為文本文件,若是非文本文件則用File類的 ReadAllBytes、WriteAllBytes,若是文本文件則看是否單行讀寫,若是單行讀寫則用StreamReader類、StreamWriter 類,若不是單行讀寫則用File類的ReadAllText、WriteAllText。
注:任意類型的文件都可以用FileStream來讀寫。
文章評論