从MSDN我了解到,当你在没有FILE_FLAG_NO_BUFFERING的情况下调用WinApi CreateFile时,WriteFile会将数据写入系统缓存。它不会直接写入物理磁盘。操作系统稍后会将其写入物理磁盘。
我想知道调用MoveFile时会发生什么。是否可以保证在MoveFile调用之后,文件会在物理磁盘上实际移动,或者只会更新系统缓存?
发布于 2016-10-20 22:41:54
如果您想要保证移动已经到达磁盘,可以使用带有MOVEFILE_WRITE_THROUGH标志的MoveFileEx,它确实可以做到这一点。请注意,这可能是一个严重的性能损害(通常很少或没有好处)。
MoveFile本身并不指定如何移动文件。它可能确实会移动,或者可能会复制并删除,并且它可能使用也可能不使用缓冲区缓存。
可以合理地假设它确实使用缓冲区缓存工作,并且“移动”实际上意味着在同一物理磁盘上“移动”。
通常没有太多理由不使用缓冲区缓存,因为除了计算机在操作过程中崩溃或用户拔下外部磁盘上的电缆外,这是完全可靠的事情。这两种情况都很少见。但是,即使它们发生了,灾难性的后果通常也是非常轻微的,并且非常可以容忍,除非您尝试移动包含数万个文件的大型目录(通常,根本没有移动任何文件,或者根据操作模式的不同,您在目标位置有一个完整的原始文件和一个陈旧的文件)。
https://stackoverflow.com/questions/40157142
复制相似问题