从MSDN我明白,当您调用WinApi的CreateFile没有FILE_FLAG_NO_BUFFERING然后WriteFile写入数据到系统caching。 它不直接写入物理磁盘。 操作系统稍后将其写入物理磁盘。
我不知道当MoveFile被调用时会发生什么。 是否保证MoveFile调用后文件实际上在物理磁盘上移动或者只是系统caching更新?
如果要保证移动已经移动到磁盘上,请使用带有MOVEFILE_WRITE_THROUGH
标志的MoveFileEx
,这个标志确实如此。 请注意,这可能是一个严重的性能损害(通常很少或没有收益)。
MoveFile
本身并不指定文件如何移动。 它确实可能会移动 ,或者它可能会复制和删除 ,它可能会或可能不会使用缓冲区缓存。
假设它确实使用缓冲区缓存工作是合理的,并且“移动”实际上意味着在同一物理磁盘上“移动”。
通常没有太多理由不使用缓冲区缓存,因为除了电脑中断操作或用户将电缆拉到外部磁盘上之外,这是非常可靠的。 这两种情况都非常罕见。 但是,即使发生了, 灾难性的后果通常也是很温和的,除非你试图用数以万计的文件移动巨大的目录(通常根本没有任何东西被移动,或者根据操作模式,你有一个完整的原始文件和目的地的陈旧文件)。