gpt4 book ai didi

c# - Stream.Position 在调用 StreamReader.ReadLineAsync 后不会改变

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:54 26 4
gpt4 key购买 nike

当我创建尝试读取这样的行时,Stream.Position 在第一次调用 StreamReader.ReadLineAsync 后更改一次,然后在多次调用后不会更改。

var stream = new FileStream(
filename,
FileMode.Open, FileAccess.Read, FileShare.Read,
bufferSize: 4096, useAsync: true);

using (var sr = new StreamReader(stream))
{
while(stream.Position <= stream.Length)
{
var pos = stream.Position;
var line = sr.ReadLineAsync().Result;
Console.WriteLine("{0}: {1}", pos, line);
}
}

当我运行它时,给定输入

1 2 3
4 5 6
7 8 9
10 11 12

它给了我输出

0: 1 2 3
29: 4 5 6
29: 7 8 9
29: 10 11 12
29:
29:

等等。

最佳答案

StreamReader.ReadLine(和等效的 ReadLineAsync)通常会读取不止只是一行 - 它基本上读入一个缓冲区,然后解释那个缓冲区。这比一次读取一个字节要高效得多,但这确实意味着流将比严格来说需要进一步推进。

基本上,我不会尝试将 Stream.Position 用于由另一个对象包装的流(例如 BufferedStreamStreamReader ETC)。缓冲让事情变得困惑。

关于c# - Stream.Position 在调用 StreamReader.ReadLineAsync 后不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com