1. 程式人生 > 實用技巧 >使用FileStream讀寫資料

使用FileStream讀寫資料

這節講一下使用FileStream讀寫資料,這是一個比較基礎的流。

FileStream類只能處理原始位元組,所以它可以處理任何型別的檔案。

先看一下它的構造方法:

FileStream fs = new FileStream("./demo.txt", FileMode.Open, FileAccess.Read);

 這個方法最少有兩個引數,也就是前兩個,第一個是檔案路徑,第二個FileMode列舉,規定檔案的開啟方式,是正常開啟還是建立等等,第三個是FileAccess列舉,規定流的訪問形式,是寫入還是讀取等等,不指明這個引數,它的預設值是ReadWrite,也就是可讀可寫。

FileMode列舉成員:

  

FileAccess列舉成員:

File和FileInfo類都提供了OpenRead()和OpenWrite()這兩個方法,可以快速建立只讀或者只寫的FileStream物件。

讀寫檔案:

讀取檔案,需要用到Read()和Write(),這兩個方法最常用的過載如下所示:

len=fs.Read(buffer, 0, buffer.Length)
write.Write(buffer, 0, len)

buffer是一個位元組陣列,用於存放一次讀取的位元組,可以自定義大小;第二個引數是偏移量,指示從buffer的第幾個索引開始讀,一般都是0,從開始讀取;第三個引數是一次讀取的大小,這個一般也都是固定的,是陣列的長度。Read()方法的返回值是本次讀取實際讀取 的長度,因為存在最後一次讀取的長度不滿buffer的長度的情況,Write()方法,第三個引數是指定寫入的長度,這裡一般指定Read()方法的返回值,這樣就不會出現將多餘的無關資料寫入檔案中。

下面看一下例子:

//讀取資料並展示
FileStream fs = new FileStream("./demo.txt", FileMode.Open, FileAccess.Read);
int len, i = 0;
//存放每次讀取的資料
byte[] buffer = new byte[5];
//存放所有讀到的資料,最後將其轉換為字串
byte[] data = new byte[fs.Length];
//迴圈讀取檔案
while ((len = fs.Read(buffer, 0, buffer.Length)) != 0)
{
    for (int j = 0; j < len; j++)
    {
        data[i
++] = buffer[j]; } } //jiang Console.WriteLine(Encoding.UTF8.GetChars(data)); ​ //資料寫入 FileStream write = new FileStream("./demo_copy.txt", FileMode.Create, FileAccess.Write); ​ //重置指標 fs.Seek(0, SeekOrigin.Begin); while ((len = fs.Read(buffer, 0, buffer.Length)) != 0) { write.Write(buffer, 0, len); } ​ fs.Dispose(); write.Dispose();

第23行用到了一個方法Seek(),這個是用來設定當前檔案指標的位置的,一般情況下,檔案讀到哪指標就指到哪,而通過這個方法,可以重新設定指標的位置,它的第一個引數是偏移量,為正數則向後移動,為負數則向前移動,第二個引數是SeekOrigin列舉,它有三個成員,Begin,End,Current,分別指示檔案的開始,結束和當前位置,偏移量根據這個列舉值進行移動。

另外,操作結束後要及時釋放資源,或者一開始使用using引用要釋放的物件。

這是我的公眾號二維碼,獲取最新文章,請關注此號