从MSDN我明白,当你在没有FILE_FLAG_NO_BUFFERING的情况下调用WinApi CreateFile时,WriteFile会将数据写入系统缓存。它不直接写入物理磁盘。操作系统稍后会将其写入物理磁盘。
我想知道在调用MoveFile时会发生什么。是否可以保证在MoveFile调用之后,文件实际上是在物理磁盘上移动还是只更新了系统缓存?
答案 0 :(得分:4)
如果您想保证移动已将其移至磁盘,请使用带有MoveFileEx
标志的MOVEFILE_WRITE_THROUGH
,这样就可以了。请注意,这可能是严重的性能损害(通常很少或没有效益)。
MoveFile
本身并未指定文件的移动方式。它可能确实移动,或者它可能 copy-and-delete ,它可能会也可能不会使用缓冲区缓存。
可以合理地假设它确实使用缓冲区缓存,并且“移动”实际上意味着在同一物理磁盘上“移动”。
通常没有太多理由不使用缓冲区缓存,因为除了计算机崩溃中期操作或用户将电缆拉到外部磁盘上,这是一个非常可靠的事情。这两种情况都非常罕见。但即使它们发生,灾难性后果通常也很温和,而且非常容忍,除非你试图移动包含成千上万个文件的大目录(通常,什么都没有被移动,或者取决于在操作模式下,您有一个完整的原始文件和目的地的陈旧文件。