如果需要在从同一流写入 FileStream 后读取其数据,是否需要调用 Flush 到 FileStream?

Do you need to call Flush to a FileStream if you need to read its data after writing to it from the same stream?

提问人:SpiritBob 提问时间:9/10/2021 更新时间:9/10/2021 访问量:189

问:

using Stream someOtherData = GetMeSomeData();
using FileStream fs = File.Create("Hello-world!");
someOtherData.CopyTo(fs);
fs.Flush(); // Is this needed?
fs.Position = 0;
ReadDataInStream(fs); // Reads the data in the stream by using Stream.Read().
C# .NET .net-core IO 文件流

评论

1赞 canton7 9/10/2021
取决于。如果不刷新,则 的内容可能尚未完全写入磁盘。但是,它仍然可供阅读的人使用。您是否关心数据是否全部刷新到磁盘?someOtherDatafs
0赞 SpiritBob 9/10/2021
@canton7不,只要读取流中的所有数据没有问题即可。ReadDataInStream(fs)
0赞 SpiritBob 9/10/2021
@canton7我认为从流中读取首先读取内部缓冲区(类似于 StreamReader 的实现),然后从操作系统获取新数据?这就是为什么您应该在重置其位置后开始重新读取之前调用它的原因,或者这里的实现细节是否不同?StreamReader.DiscardBufferedData()StreamReaderFileStream
0赞 canton7 9/10/2021
实际上,读取源代码,设置 Position 无论如何都会刷新写入缓冲区,所以它没有意义
1赞 canton7 9/13/2021
这是我的理解:如果有缓冲,设置会刷新写入缓冲区。这并不一定意味着数据被刷新到磁盘,但它确实意味着从流中读取将读取您之前写入流的数据Position

答: 暂无答案