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

2021-04-07 04:27:02 字數 2365 閱讀 6684

如何有效的使用c#讀取檔案

你平時是怎麼讀取檔案的?使用流讀取。是的沒錯,

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