香蕉视频app

Keep on going never give up.

Let's Go

C# 學習筆記(37)使用FileStream(文件流)來讀寫文件

C#Lonely2019-05-14 22:22:22103次0條

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();

運行結果:

png

總結:大文件使用FileStream,小文件則看是否為文本文件,若是非文本文件則用File類的 ReadAllBytes、WriteAllBytes,若是文本文件則看是否單行讀寫,若是單行讀寫則用StreamReader類、StreamWriter 類,若不是單行讀寫則用File類的ReadAllText、WriteAllText。

香蕉视频app 注:任意類型的文件都可以用FileStream來讀寫。



暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!