我有一个 StreamWriter,其底层流是FileStream
. 下面的代码是否保证也将其缓冲区刷新到文件系统上FileStream
的实际文件中,还是我需要显式调用?Flush()
FileStream
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,“除非您明确调用 Flush 或 Close,否则刷新流不会刷新其底层编码器”,但我不知道 FileStream 是否可以被视为“底层编码器”。
另外,如果我不指定 FileOptions.WriteThrough,我是否保证操作系统最终会将刷新的行写入磁盘,即使程序在两个流关闭之前崩溃(假设例如没有using {}
块,只调用Flush()
)?
在我的场景中,我需要保持流打开(用于记录),因此我不能使用using {}
块,但我想确保即使程序崩溃,数据也将始终写入磁盘。如果电源关闭并且操作系统没有刷新到磁盘上,我可以承受丢失数据的后果,但否则我需要操作系统最终刷新,即使我从未正确调用Close()
流。