【问题标题】:Filestream only reading the first 4 characters of the fileFilestream 只读取文件的前 4 个字符
【发布时间】:2011-05-03 00:08:53
【问题描述】:

你好!我正在尝试使用文件流读取一个 150mb 的文件,但每次我这样做时,我得到的都是:|zl 而不是整个流。请注意,其中包含一些特殊字符。

有人知道问题出在哪里吗?这是我的代码:

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

编辑:
我试图阅读所有文本,但它仍然返回相同的四个字符。除了这几个文件之外,它在任何其他文件上都可以正常工作。当我使用读取所有行时,它只会获取第一行。

【问题讨论】:

  • 您确定该文件是文本文件吗?如果File.ReadAllText 只返回四个字符,那么最好确定文件的其余部分不是文本。或者我想可能是path 没有指向您认为它指向的文件。检查fs.Read 的返回值,确保您实际读取的数据与您认为的一样多。

标签: c# file io


【解决方案1】:

fs.Read() 不会一次读取全部字节,它读取一些字节并返回读取的字节数。 MSDN 有一个很好的例子来说明如何使用它来获取整个文件:

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

不管怎样,将整个 150MB 的数据读入内存确实会消耗客户的系统——首选的选项是对其进行优化,这样您就不需要一次全部使用整个文件.

【讨论】:

  • 这就是为什么内存映射文件是更好的解决方案。
  • 谢谢,我不知道这个。
【解决方案2】:

如果您想以这种方式阅读文本 File.ReadAllLine(或 ReadAllText)-http://msdn.microsoft.com/en-us/library/s2tte0y1.aspx 是更好的选择。

我猜该文件不是以文本文件开头的,并且显示结果字符串的方式确实停止在 0 个字符处。

正如 debracey 指出的那样,Read 返回读取的字节数 - 检查一下。同样对于文件操作,它不太可能在 4 个字符处停止...

【讨论】:

  • 我这样做了,但它返回了相同的字符串。我也刚刚测试了上述内容,但我仍然只得到了前四个。当我使用读取所有行时,它只会得到第一行。
猜你喜欢
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多