windows - 从 ReplaceFile 重现 ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 错误代码

标签 windows winapi error-handling error-code

我正在使用 ReplaceFile Win32 函数作为获取原子行为的操作的一部分。

在该函数的三个特殊错误代码中,我已经能够从两个错误代码中重现和恢复(回滚):ERROR_UNABLE_TO_MOVE_REPLACEMENT 和 ERROR_UNABLE_TO_REMOVE_REPLACED。

我的问题与第三个错误代码有关:ERROR_UNABLE_TO_MOVE_REPLACEMENT_2

  1. 有没有人看到返回此错误代码?在什么条件下是可能的?
  2. 关于如何重现此错误以便我可以测试从错误中恢复的代码中的路径有什么想法吗?
  3. 我从文档中了解到,要从此错误中恢复(回滚),我需要将替换文件重命名回其原始名称,因为 ReplaceFile 将保留备份文件名。任何人都可以验证这实际上是 ReplaceFile 保留文件的状态吗?

如果有帮助,请提供更多详细信息:

  • 使用非 NULL 备份文件名调用 ReplaceFile(实际上,如果给出 NULL 备份名,则不会发生 ERROR_UNABLE_TO_MOVE_REPLACEMENT_2)。
  • 我还传递了 REPLACEFILE_WRITE_THROUGH 标志。
  • 所有文件都存在于同一个 NTFS 卷上。

最佳答案

ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 当属性和辅助数据流已附加到替换文件,但主文件本身无法替换时发生。

您关于恢复的假设是正确的。

关于windows - 从 ReplaceFile 重现 ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728314/

相关文章:

c++ - GetFileAttributes 不一致——为什么?

ios - 如何解决错误 : NSURLConnectionInternalConnection _withConnectionDisconnectFromConnection

windows - 批处理文件功能执行时间过长

windows - 如何在卸载部分调用 nsi 函数?

.net - 如何检测两个文件是否在同一个 "volume"上?

sql - SQL ORA-00933命令未正确结束

powershell - 处理来自PowerShell脚本的DISM错误

c - 通过完全限定的路径打开命名的互斥体

perl - 如何让 Perl 脚本识别 Win32 cmd 控制台中的参数?

c# - 将自定义上下文菜单项添加到 Windows 窗体标题栏