/ / NTFS transaccional - espere a CommitTransaction - ventanas, transacciones, ntfs

NTFS transaccional - espere a CommitTransaction - ventanas, transacciones, ntfs

Estoy usando Transactional NTFS para atomizar múltiples escrituras en varios archivos. El problema es que después de confirmar, es posible que no pueda volver a abrir un archivo, Tal vez debido a una condición de carreras.

La secuencia de eventos es:

  1. La transacción NTFS se crea con CreateTransaction
  2. Los archivos se abren con CreateFileTransacted
  3. Se hacen escrituras a los archivos.
  4. Los archivos están cerrados con CloseHandle
  5. La transacción se compromete con CommitTransaction
  6. Los archivos se vuelven a abrir con CreateFile para leer / escribir

El último paso a veces falla con el código de error 3: ERROR_PATH_NOT_FOUND: el sistema no puede encontrar la ruta especificada. Al volver a ejecutar el programa, se encuentra el archivo. Esto sucede raramente, pero de una manera completamente aleatoria, lo que significa que no siempre Al volver a abrir el mismo archivo.

Mi teoría es que si se termina la transacción.Por Windows lleva mucho tiempo una vez, los archivos no están disponibles para abrirse en modo de lectura / escritura hasta La transacción termina. Mi programa falla cuando intento abrir Mis propios archivos en modo no transacción.

Creo que para evitar este problema, necesito esperar la transacción. para completar antes de volver a abrir los archivos. Sin embargo, no he encontrado ningún método documentado para hacerlo.

Respuestas

1 para la respuesta № 1

No hay respuestas inteligentes, así que tuve que implementar mi propio dummy:

Si ocurre un error de E / S al abrir un archivo queestaba cerrado, La solución fue hacer un bucle en la apertura varias veces mientras se realizaba una llamada Sleep () para liberar la CPU, antes de decidir que se ha producido un error catastrófico.

Solución ficticia, pero solucionó el problema.