2011-05-03 36 views
0

嘿!我試圖用文件流讀取一個150MB的文件,但每次我這樣做時,我得到的是:|zl而不是整個流。請注意,它有一些特殊字符。Filestream只讀取文件的前4個字符

有誰知道問題可能是什麼?這裏是我的代碼:

using (FileStream fs = File.OpenRead(path)) 
{ 
    byte[] buffer = new byte[fs.Length]; 
    fs.Read(buffer, 0, buffer.Length); 
    extract = Encoding.Default.GetString(buffer); 
} 

編輯:
我試圖讀取的所有文字,但它仍然返回相同的四個大字。除了這幾個以外,它可以在任何其他文件上正常工作。當我使用讀取所有行時,它只會獲得第一行。

+0

您確定該文件是文本文件嗎?如果'File.ReadAllText'只返回四個字符,那麼可以肯定文件的其餘部分不是文本。或者我想這可能是'path'沒有指向你認爲它指向的文件。檢查'fs.Read'的返回值以確保您實際上正在讀取儘可能多的數據。 – 2011-05-03 03:31:40

回答

8

fs.Read()不會一次讀取整個字節,它會讀取一定數量的字節並返回讀取的字節數。 MSDN對如何使用它來獲取整個文件一個很好的例子:

http://msdn.microsoft.com/en-us/library/system.io.filestream.read.aspx

對於它的價值,讀取數據的整個150MB到內存真的打算把漏您的客戶端系統上 - - 首選方法是優化它,這樣您就不需要一次全部整個文件。

+1

這就是爲什麼內存映射文件是更好的解決方案。 – 2011-05-03 00:21:08

+0

謝謝,我不知道這一點。 – user556396 2011-05-03 00:23:51

2

如果要以這種方式讀取文本File.ReadAllLine(或ReadAllText) - http://msdn.microsoft.com/en-us/library/s2tte0y1.aspx是更好的選擇。

我猜這個文件不是以文本文件開頭的,你顯示結果字符串的方式在0個字符處停止。

正如Debracey指出的那樣,Read返回讀取的字節數 - 檢查出來。此外,對於文件操作,它不可能停止在4個字符處...

+0

我這樣做,但它返回相同的字符串。我也只是測試了以上,我仍然只獲得前四名。當我使用讀取所有行時,它只會獲得第一行。 – user556396 2011-05-03 00:29:05