事务性NTFS - 等待CommitTransaction

时间:2016-05-04 08:44:35

标签: windows transactions ntfs

我正在使用Transactional NTFS来对多个文件进行多次写入。 问题是提交后,我可能无法重新打开文件, 也许是因为比赛条件。

事件的顺序是:

  1. 使用CreateTransaction
  2. 创建NTFS事务
  3. 使用CreateFileTransacted
  4. 打开文件
  5. 写入文件
  6. 使用CloseHandle
  7. 关闭文件
  8. 使用CommitTransaction
  9. 提交交易
  10. 使用CreateFile重新打开文件以进行读/写
  11. 最后一步有时会失败,错误代码为3: ERROR_PATH_NOT_FOUND - 系统找不到指定的路径。 重新执行程序时,会找到该文件。 这很少发生,但是以完全随机的方式发生,意味着并非总是如此 重新打开同一个文件时。

    我的理论是,如果通过Windows终止交易需要很长时间 时间,文件不能在读/写模式下打开,直到 交易终止。我的程序在尝试打开时失败了 我自己的文件处于非交易模式。

    我认为要避免这个问题,我需要等待交易 在重新打开文件之前完成。 但是,我没有找到任何记录在案的方法。

1 个答案:

答案 0 :(得分:1)

没有聪明的答案,所以我必须实现我自己的虚拟答案:

如果在打开刚刚关闭的文件时发生I / O错误, 解决方案是在中间呼叫时循环打开几次 在决定发生灾难性错误之前,请先休眠()释放CPU。

虚拟解决方案,但它解决了这个问题。