MoveFile是否确保文件在磁盘上移动?

时间:2016-10-20 14:22:22

标签: windows winapi

从MSDN我明白,当你在没有FILE_FLAG_NO_BUFFERING的情况下调用WinApi CreateFile时,WriteFile会将数据写入系统缓存。它不直接写入物理磁盘。操作系统稍后会将其写入物理磁盘。

我想知道在调用MoveFile时会发生什么。是否可以保证在MoveFile调用之后,文件实际上是在物理磁盘上移动还是只更新了系统缓存?

1 个答案:

答案 0 :(得分:4)

如果您想保证移动已将其移至磁盘,请使用带有MoveFileEx标志的MOVEFILE_WRITE_THROUGH,这样就可以了。请注意,这可能是严重的性能损害(通常很少或没有效益)。

MoveFile本身并未指定文件的移动方式。它可能确实移动,或者它可能 copy-and-delete ,它可能会也可能不会使用缓冲区缓存。
可以合理地假设它确实使用缓冲区缓存,并且“移动”实际上意味着在同一物理磁盘上“移动”。

通常没有太多理由不使用缓冲区缓存,因为除了计算机崩溃中期操作或用户将电缆拉到外部磁盘上,这是一个非常可靠的事情。这两种情况都非常罕见。但即使它们发生,灾难性后果通常也很温和,而且非常容忍,除非你试图移动包含成千上万个文件的大目录(通常,什么都没有被移动,或者取决于在操作模式下,您有一个完整的原始文件和目的地的陈旧文件。