如何有效的使用C 讀取檔案

2021-04-13 01:44:48 字數 2075 閱讀 4714

你平時是怎麼讀取檔案的?使用流讀取。是的沒錯,c#給我們提供了非常強大的類庫(又一次吹捧了.net一番),裡面封裝了幾乎所有我們可以想到的和我們沒有想到的類,流是讀取檔案的一般手段,那麼你真的會用它讀取檔案中的資料了麼?真的能讀完全麼?

通常我們讀取乙個檔案使用如下的步驟:

1、宣告並使用file的openread例項化乙個檔案流物件,就像下面這樣

filestream fs = file.openread(filename);

或者filestream fs = filestream(filename, filemode.open, fileaccess.read, fileshare.read);

2、準備乙個存放檔案內容的位元組陣列,fs.length將得到檔案的實際大小,就像下面這樣

byte data = new byte[fs.length];

3、哇!開始讀了,呼叫乙個檔案流的乙個方法讀取資料到data陣列中

fs.read (data, 0, data.length);

呵呵!我們只寫了3句就可以把檔案裡面的內容原封不動的讀出來,真是太簡潔了!可以這段**真的能像你預期的那樣工作麼?答案是:幾乎可以!在大部分情況下上面的**工作的很好,但是我們應該注意read方法是有返回值的,既然有返回值那麼一定有其道理,如果按照上面的寫法完全可以是乙個沒有返回值的函式。我想返回值的目的是,為了給我們乙個機會判斷實際讀取檔案的大小,從而來判斷檔案是否已經完全讀完。所以上面的**不能保證我們一定讀完了檔案裡面的所有位元組(雖然在很多情況下是讀完了)。下面的方法提供了乙個比上面方法更安全的方法,來保證檔案被完全讀出

public static void saferead (stream stream, byte data)

}有些情況下你不知道流實際的長度比如:網路流。此時可以使用類似的方法讀取流直到流裡面的資料完全讀取出來為止。我們可以先初始化一段快取,再將流讀出來的流資訊寫到記憶體流裡面,就像下面這樣:

public static byte readfully (stream stream)}}

雖然上面的例子都比較簡單,效果也不是很明顯(大部分都是對的),也許你早就會了,沒關係這篇文章本來就是寫給初學者的。

下面的方法提供了一種使用指定快取長度的方式讀取流,雖然在很多情況下你可以直接使用stream.length得到流的長度,但是不是所有的流都可以得到。

public static byte read2buffer (stream stream, int bufferlen)

// 初始化乙個快取區

byte buffer = new byte[bufferlen];

int read=0;   

int block;

// 每次從流中讀取快取大小的資料,知道讀取完所有的流為止

while ( (block = stream.read(buffer, read, buffer.length-read)) > 0)

// 調整陣列大小準備繼續讀取

byte newbuf = new byte[buffer.length*2];

array.copy(buffer, newbuf, buffer.length);

newbuf[read]=(byte)nextbyte;

buffer = newbuf;// buffer是乙個引用(指標),這裡意在重新設定buffer指標指向乙個更大的記憶體

read++;}}

// 如果快取太大則使用ret來收縮前面while讀取的buffer,然後直接返回

byte ret = new byte[read];

array.copy(buffer, ret, read);

return ret;

} using system;

using system.io;

using system.collections;

namespace textfilereader_csharp

objreader.close();

foreach (string soutput in arrtext)

console.writeline(soutput);

console.readline();}}

如何有效的使用C 讀取檔案

如何有效的使用c 讀取檔案 你平時是怎麼讀取檔案的?使用流讀取。是的沒錯,c 給我們提供了非常強大的類庫 又一次吹捧了.net一番 裡面封裝了幾乎所有我們可以想到的和我們沒有想到的類,流是讀取檔案的一般手段,那麼你真的會用它讀取檔案中的資料了麼?真的能讀完全麼?通常我們讀取乙個檔案使用如下的步驟 1...

如何有效的使用C 讀取檔案

你平時是怎麼讀取檔案的?使用流讀取。是的沒錯,c 給我們提供了非常強大的類庫 又一次吹捧了.net一番 裡面封裝了幾乎所有我們可以想到的和我們沒有想到的類,流是讀取檔案的一般手段,那麼你真的會用它讀取檔案中的資料了麼?真的能讀完全麼?通常我們讀取乙個檔案使用如下的步驟 1 宣告並使用file的ope...

如何有效的使用C 讀取檔案

如何有效的使用c 讀取檔案 你平時是怎麼讀取檔案的?使用流讀取。是的沒錯,c 給我們提供了非常強大的類庫 又一次吹捧了 net 一番 裡面封裝了幾乎所有我們可以想到的和我們沒有想到的類,流是讀取檔案的一般手段,那麼你真的會用它讀取檔案中的資料了麼?真的能讀完全麼?通常我們讀取乙個檔案使用如下的步驟 ...