1

Java のRandomAccessFile(path, "rws")方法と同様の動作、つまり、データがファイルに書き込まれるとすぐにディスクにフラッシュする必要があります。

私は自分の目的のために使用することに傾いてBinaryWriterいますが、フラッシュ動作を指定する方法がありません。

助言がありますか?

4

4 に答える 4

1

BinaryWriterではなくsealed、すべてのWriteメソッドはvirtualです。それらをオーバーライドして、への呼び出しを追加できますFlush。たとえば、次のようになります。

public override void Write(byte value)
{
    base.Write(value);
    Flush(); // which is just: this.OutStream.Flush();
}

でも!ほとんどの場合、これはパフォーマンスにとって非常に悪いものです。お勧めしません。

StreamWriterまたは類似のものを使用している場合は、単に;に設定AutoFlushします。true仕事が終わりました。繰り返しになりますが、これはパフォーマンスを著しく低下させる可能性があります。

于 2013-01-09T10:40:36.420 に答える
0

拡張メソッドをラッパーとして作成することをお勧めします。

public static class MyBinaryWriterExtensions {
  public static void WriteAndFlush(this BinaryWriter writer, byte[] data) {
     writer.Write(data);
     // Slow! Disk access is at least 10 ms! (for a fast disk)
     writer.Flush();
  }
}

これは次のように呼び出されます。

BinaryWriter bw = ... // Getting your writer somehow
byte[] data = ... // your data
bw.WriteAndFlush(data); // Will write and flush!

それとも、ある種の原子性が必要ですか?

于 2013-01-09T10:39:58.833 に答える
0

最後に Dispose() するすべてのライターを 'using' に入れることができます

using (BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create)))
        {
            writer.Write(1.250F);
            writer.Write(@"c:\Temp");
            writer.Write(10);
            writer.Write(true);
        }

テキストには、File.WriteAllTextフラッシュをまったく必要としない関数を使用できます

于 2013-01-09T10:40:06.420 に答える