18

什么时候需要刷新文件?
我从不这样做,因为我调用 File.Close 并且我认为它会自动刷新,不是吗?

4

4 回答 4

26

您会注意到 os.File 没有 .Flush() 因为它不需要一个,因为它没有缓冲。写入它是直接写入文件的系统调用。

当您的程序退出时(即使它崩溃),它打开的所有文件都将被操作系统自动关闭,并且文件系统会在处理它时将您的更改写入磁盘(有时在程序退出后的几分钟内) .

调用 os.File.Sync() 将调用 fsync() 系统调用,这将强制文件系统将其缓冲区刷新到磁盘。即使系统关闭或操作系统崩溃,这也将保证您的数据在磁盘上并且是持久的。

你不需要调用 .Sync()

于 2012-06-05T00:42:52.397 回答
20

这里File.Sync()fsync的系统调用。您应该能够在该名称下找到更多信息。

请记住,fsync它与fflush不同,并且不会在关闭之前执行。

您通常不需要调用它。无论如何,如果在此期间没有电源故障,文件将在一段时间后写入磁盘。

于 2012-06-02T13:12:34.337 回答
4

看起来这里的大多数建议是不要调用 fsync(),但总的来说,这主要取决于您的应用程序要求。如果您正在处理关键文件的读/写,始终建议调用 fsync()。

http://www.microhowto.info/howto/atomically_rewrite_the_content_of_a_file.html#idp31936

链接,有关何时 file.Sync() 将提供帮助的更多详细信息。

于 2018-01-29T21:13:47.520 回答
0

当您想尽可能确保数据完整性时。例如,如果您的程序在关闭文件之前崩溃了怎么办?

于 2012-06-02T12:40:47.973 回答