我注意到它会一遍又一遍地返回相同的已读字符,但我想知道是否有更优雅的方法。
发布于 2011-06-23 21:57:02
while(!streamReader.EndOfStream)
{
string line = streamReader.ReadLine();
Console.WriteLine(line);
}
Console.WriteLine("End of File");发布于 2011-06-23 21:54:09
检查StreamReader.EndOfStream。当这是true时停止你的读取循环。
确保您的代码也正确地处理了ReadBlock调用中"byte count just read“的返回值。听起来您看到的是零字节读取,只是假设您看到的未更改的缓冲区内容是对相同数据的另一次读取。
发布于 2011-06-23 22:11:11
当返回的读取长度小于您请求的读取长度时,您处于末尾。您还应该跟踪读取长度,以防流大小与缓冲区大小不完全匹配,因此需要考虑缓冲区中较短的数据长度。
do{
len = stream.ReadBlock(buffer, 0, buffer.Length);
/* ... */
}while(len == buffer.Length);您还可以在循环条件中检查流的EndOfStream标志。我更喜欢这种方法,因为你不会读取'0‘长度(这种情况很少见,但这是有可能发生的)。
do{
len = stream.ReadBlock(buffer, 0, buffer.Length);
/* ... */
}while(!stream.EndOfStream);https://stackoverflow.com/questions/6455150
复制相似问题