【问题标题】:Does MoveFile ensure file is moved on the disk?MoveFile 是否确保文件在磁盘上移动?
【发布时间】:2017-03-02 14:43:52
【问题描述】:

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

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

【问题讨论】:

  • 是什么引发了这个问题?

标签: windows winapi


【解决方案1】:

如果您想保证移动已写入磁盘,请使用 MoveFileExMOVEFILE_WRITE_THROUGHflag,它就是这样做的。请注意,这可能是严重的性能损害(通常很少或没有好处)。

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

通常没有太多理由不使用缓冲区缓存,因为除了计算机在运行过程中崩溃或用户在外部磁盘上拔出电缆外,这是非常可靠的事情。这两种情况都非常罕见。但即使它们发生了,灾难性的后果通常也很轻微,而且是可以容忍的,除非您尝试移动包含数万个文件的巨大目录(通常,根本没有移动任何内容,或者取决于操作模式,您有一个完整的原始文件和一个过时的文件在目的地)。

【讨论】:

  • n.b:还有“交易动作”,我故意在答案中没有提到,因为微软现在不鼓励使用交易 API。
猜你喜欢
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 2023-04-01
  • 2017-06-26
  • 2013-12-26
相关资源
最近更新 更多