首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中使用ReadBlock方法时,我如何判断我已经到达了文件的末尾?

在C#中使用ReadBlock方法时,我如何判断我已经到达了文件的末尾?
EN

Stack Overflow用户
提问于 2011-06-23 21:52:27
回答 5查看 55.7K关注 0票数 25

我注意到它会一遍又一遍地返回相同的已读字符,但我想知道是否有更优雅的方法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-23 21:57:02

代码语言:javascript
复制
while(!streamReader.EndOfStream)
{
    string line = streamReader.ReadLine();
    Console.WriteLine(line);
}
Console.WriteLine("End of File");
票数 54
EN

Stack Overflow用户

发布于 2011-06-23 21:54:09

检查StreamReader.EndOfStream。当这是true时停止你的读取循环。

确保您的代码也正确地处理了ReadBlock调用中"byte count just read“的返回值。听起来您看到的是零字节读取,只是假设您看到的未更改的缓冲区内容是对相同数据的另一次读取。

票数 5
EN

Stack Overflow用户

发布于 2011-06-23 22:11:11

当返回的读取长度小于您请求的读取长度时,您处于末尾。您还应该跟踪读取长度,以防流大小与缓冲区大小不完全匹配,因此需要考虑缓冲区中较短的数据长度。

代码语言:javascript
复制
do{
     len = stream.ReadBlock(buffer, 0, buffer.Length);
     /* ... */
  }while(len == buffer.Length);

您还可以在循环条件中检查流的EndOfStream标志。我更喜欢这种方法,因为你不会读取'0‘长度(这种情况很少见,但这是有可能发生的)。

代码语言:javascript
复制
do{
      len = stream.ReadBlock(buffer, 0, buffer.Length);
      /* ... */
  }while(!stream.EndOfStream);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6455150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档