我正在使用Transactional NTFS来对多个文件进行多次写入。 问题是提交后,我可能无法重新打开文件, 也许是因为比赛条件。
事件的顺序是:
CreateTransaction
CreateFileTransacted
CloseHandle
CommitTransaction
CreateFile
重新打开文件以进行读/写最后一步有时会失败,错误代码为3: ERROR_PATH_NOT_FOUND - 系统找不到指定的路径。 重新执行程序时,会找到该文件。 这很少发生,但是以完全随机的方式发生,意味着并非总是如此 重新打开同一个文件时。
我的理论是,如果通过Windows终止交易需要很长时间 时间,文件不能在读/写模式下打开,直到 交易终止。我的程序在尝试打开时失败了 我自己的文件处于非交易模式。
我认为要避免这个问题,我需要等待交易 在重新打开文件之前完成。 但是,我没有找到任何记录在案的方法。
答案 0 :(得分:1)
没有聪明的答案,所以我必须实现我自己的虚拟答案:
如果在打开刚刚关闭的文件时发生I / O错误, 解决方案是在中间呼叫时循环打开几次 在决定发生灾难性错误之前,请先休眠()释放CPU。
虚拟解决方案,但它解决了这个问题。