1、FileStream文件流的概念:
FileStream 類對文件系統上的文件進行讀取、寫入、打開和關閉操作,並對其他與文件相關的操作系統句柄進行操作,如管道、標准輸入和標准輸出。讀寫操作可以指定為同步或異步操作。FileStream 對輸入輸出進行緩沖,從而提高性能。——MSDN
簡單點說:FileStream類可以對任意類型的文件進行讀取操作,而且我們也可以根據自己需要來指定每一次讀取字節長度,以此減少內存的消耗,提高讀取效率。
2、File和FileStream的區別
直觀點:File是一個靜態類;FileStream是一個非靜態類。
File:是一個文件的類,對文件進行操作。其內部封裝了對文件的各種操作(MSDN:提供用於創建、復制、刪除、移動和打開單一文件的靜態方法,並協助創建FileStream對象)。
FileStream:文件流的類。對txt,xml,avi等文件進行內容寫入、讀取、復制...時候需要使用的一個工具。
打個形象的比喻。File是筆記本,需要Filestream的這個筆才能寫.
換而言之,記事本是一個文件,可以用File操作,里面的內容需要用FileStream來操作。
注:FileStream是對字節操作的(任何文件)。
3、使用FileStream讀取數據、使用using幫我們結束后自動釋放資源不用寫Close()和Dispose()方法。
/// <summary>
/// 使用FileStream讀取文件
/// </summary>
/// <param name="path">要讀取的文件路徑</param>
/// <param name="str"></param>
public static string FileStreamRead(string path)
{
using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
{
byte[] buffer = new byte[1024*1024*5];//每次讀取5M長度
int r= fsRead.Read(buffer, 0, buffer.Length);//返回本次實際讀取到的有效字節數
string str = Encoding.UTF8.GetString(buffer, 0, r);//使用utf-8編碼格式
return str;
}
}
4、使用FileStream寫入數據
1 /// <summary> 2 /// 使用FileStream寫入數據 3 /// </summary> 4 /// <param name="path">要寫入文件的路徑</param> 5 /// <param name="str">要寫入的字符串</param> 6 public static void FileStreamWrite(string path,string str) 7 { 8 using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)) 9 { 10 byte[] buffer = Encoding.UTF8.GetBytes(str); 11 //使用utf-8編碼格式 12 fsWrite.Write(buffer, 0, buffer.Length); 13 } 14 15 }
無論是讀還是寫,都要借助一個緩沖區buffer來存取字節。
注意:在寫入和讀取時,字符編碼格式要相同,不然會出現亂碼。
Encoding.UTF8.GetBytes(str);
Encoding.UTF8.GetString(b, 0, r);
