2016-05-04 12 views
1

我使用事務性NTFS來將多個寫入操作原型化爲多個文件。 問題是,提交後,我可能無法重新打開一個文件,也許是因爲比賽條件。事務性NTFS - 等待CommitTransaction

事件的順序是:

  1. NTFS交易與CreateTransaction
  2. 文件創建了CreateFileTransacted
  3. 寫被打開完成的文件
  4. 文件被關閉與CloseHandle
  5. 交易承諾CommitTransaction
  6. 個文件被重新開CreateFile讀/寫

最後一步有時會失敗,錯誤代碼3: ERROR_PATH_NOT_FOUND - 系統找不到指定的路徑。 重新執行程序時,會找到該文件。 這種情況很少發生,但以完全隨機的方式發生,意思是在重新打開同一個文件時不總是 。

我的理論是,如果通過Windows終止交易需要很長的時間,則文件不可用於以讀/寫模式打開,直到事務終止爲 。我的程序然後嘗試在非事務模式下打開我自己的文件 失敗。

我認爲,爲避免這個問題,我需要等待交易 完成之前重新打開文件。 但是,我還沒有找到任何記錄的方法來做到這一點。

回答

1

不聰明的回答,所以我不得不實現自己的虛擬之一:

如果打開剛關閉的文件, 發生的I/O錯誤的解決辦法是在同時打開多個次循環 - 在調用 Sleep()釋放CPU之前,確定發生了災難性錯誤。

虛擬解決方案,但它解決了這個問題。