2011-05-03 35 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