基になるストリームが である 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 を指定しない場合、2 つのストリームが閉じられる前にプログラムがクラッシュした場合でも、OS が最終的にフラッシュされた行をディスクに書き込むことが保証されますか (たとえば、using {}
ブロックがなく、Flush()
)?
私のシナリオでは、(ロギングのために) ストリームを開いたままにしておく必要があるため、using {}
ブロックを使用できませんが、プログラムがクラッシュした場合でもデータが常にディスクに書き込まれるようにしたいと考えています。電源がシャットダウンされ、OS がディスクにフラッシュされていない場合は、データを失う余裕がありClose()
ます。