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

Windows MoveFile是否确保文件在磁盘上移动?,windows,winapi,Windows,Winapi,从MSDN中我了解到,当您调用WinApi CreateFile而不使用FILE\u FLAG\u NO\u缓冲时,WriteFile会将数据写入系统缓存。它不会直接写入物理磁盘。操作系统稍后会将其写入物理磁盘 我想知道调用MoveFile时会发生什么。是否保证在调用MoveFile后,该文件实际在物理磁盘上移动,或者仅更新了系统缓存?如果要保证移动已到达磁盘,请使用带有MoveFile\u WRITE\u THROUGH标志的MoveFileEx,该标志正好可以做到这一点。请注意,这可能是一种

从MSDN中我了解到,当您调用WinApi CreateFile而不使用FILE\u FLAG\u NO\u缓冲时,WriteFile会将数据写入系统缓存。它不会直接写入物理磁盘。操作系统稍后会将其写入物理磁盘


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

如果要保证移动已到达磁盘,请使用带有
MoveFile\u WRITE\u THROUGH
标志的
MoveFileEx
,该标志正好可以做到这一点。请注意,这可能是一种严重的性能损害(通常很少或没有好处)

MoveFile
本身并不指定文件的移动方式。它可能确实会移动,也可能会复制和删除,它可能会使用缓冲区缓存,也可能不会使用缓冲区缓存。
可以合理地假设它确实使用缓冲区缓存工作,“移动”实际上意味着在同一物理磁盘上“移动”


通常没有太多理由不使用缓冲缓存,因为除了计算机在操作过程中崩溃或用户在外部磁盘上拉电缆之外,这是一件非常可靠的事情。这两种情况都非常罕见。但是,即使发生这种情况,灾难性后果通常是非常轻微的,并且是可以容忍的,除非您试图移动包含数万个文件的大型目录(通常,根本没有移动任何文件,或者根据操作模式,您在目标位置有一个完整的原始文件和一个过时的文件).

如果您想保证移动已到达磁盘,请使用带有
MOVEFILE\u WRITE\u THROUGH
标志的
MoveFileEx
,该标志正是这样做的。请注意,这可能是一种严重的性能损害(通常很少或没有好处)

MoveFile
本身并不指定文件的移动方式。它可能确实会移动,也可能会复制和删除,它可能会使用缓冲区缓存,也可能不会使用缓冲区缓存。
可以合理地假设它确实使用缓冲区缓存工作,“移动”实际上意味着在同一物理磁盘上“移动”


通常没有太多理由不使用缓冲缓存,因为除了计算机在操作过程中崩溃或用户在外部磁盘上拉电缆之外,这是一件非常可靠的事情。这两种情况都非常罕见。但是,即使发生这种情况,灾难性后果通常是非常轻微的,并且是可以容忍的,除非您试图移动包含数万个文件的大型目录(通常,根本没有移动任何文件,或者根据操作模式,您在目标位置有一个完整的原始文件和一个过时的文件).

什么引起了这个问题?什么引起了这个问题?注意:还有一些“交易式移动”,我在回答中故意没有提到,因为微软现在不鼓励使用交易API。注意:还有一些“交易式移动”我故意没有在回答中提到这一点,因为微软现在不鼓励使用事务API。