StreamWriter.Flush()也会调用FileStream.Flush()吗?

您所在的位置:网站首页 字符流有缓冲吗 StreamWriter.Flush()也会调用FileStream.Flush()吗?

StreamWriter.Flush()也会调用FileStream.Flush()吗?

2023-05-05 07:27| 来源: 网络整理| 查看: 265

我有一个StreamWriter,它的底层流是FileStream。下面的代码将保证FileStream也将其缓冲区刷新到文件系统上的实际文件中,还是需要显式地调用FileStream上的Flush()

using (var fs = new FileStream("blabla", FileMode.Append)) { using (var sw = new StreamWriter(fs)) { sw.WriteLine("Hello, I want to be flushed."); sw.Flush(); //I need this to also flush onto the file, not just to the FileStream } }

根据MSDN,“刷新流不会刷新它的底层编码器,除非您显式地调用刷新或关闭”,但是我不知道FileStream是否可以被认为是“底层编码器”。

另外,如果我不指定FileOptions.WriteThrough,是否可以保证操作系统最终会将刷新行写入磁盘,即使程序在两个流关闭之前崩溃(例如,假设没有using {}块,只调用Flush())?

在我的场景中,我需要保持流是打开的(用于日志记录),因此我不能使用using {}块,但是我希望确保即使程序崩溃,数据也总是被写入磁盘。如果电源关机,并且操作系统没有刷新到磁盘上,我可以承受丢失数据的代价,但否则,我需要操作系统最终刷新,即使我从未在流上正确调用Close()。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3