我需要使用FileStream.Flush()或FileStream.Flush(true)吗?

时间:2014-08-12 01:54:02

标签: c# filestream flush

在我的程序中,我写了一个文件,然后调用一个读取该文件的外部程序。我是否需要Flush(true)以确保数据完全写入磁盘,或Flush()是否足够?

class ExampleClass : IDisposable {
    private FileStream stream = File.Open("command-list.txt", FileMode.Append, FileAccess.Write, FileShare.Read);

    public void Execute(string command) {
        var buffer = Encoding.UTF8.GetBytes(command);
        stream.WriteByte(10);
        stream.Write(buffer, 0, buffer.Length);
        stream.Flush(true);
        Process.Start("processor", "command-list.txt");
    }

    public void Dispose() {
        stream.Close();
    }
}

2 个答案:

答案 0 :(得分:4)

既不;您应该简单地将流处理为using语句。

或者,更好的是,用File.AppendAllText()替换整个事物。

答案 1 :(得分:2)

调用Dispose或任何类型的Flush会使其他软件看到已写入的数据它赢了保证数据实际上会一直到磁盘。如果是在数据实际写入之前,数据被写入USB驱动器并且电缆被拔掉,如果使用Flush(true)或其他类似方法确保数据已被写入,程序将只发现问题在它结束之前。程序是否应该使用Flush(true)取决于应用程序。如果硬盘驱动器不可移动并且只能在写入文件失败的情况下失败,那么Flush(true)就不是必需的了。如果用户在程序认为完成后可能会拔出USB驱动器,那么Flush(true)可能是个好主意。