/ / Transakčný NTFS - čakajte na CommitTransaction - windows, transakcie, ntfs

Transakčný NTFS - čakajte na CommitTransaction - windows, transakcie, ntfs

Používam Transactional NTFS na rozptýlenie viacerých zápisov na niekoľko súborov. Problém je v tom, že po odovzdaní súboru sa mi zdá, že nebude možné znova otvoriť súbor, možno kvôli pretekárskej situácii.

Postupnosť udalostí je:

  1. NTFS transakcia je vytvorená pomocou CreateTransaction
  2. Súbory sa otvárajú spolu s CreateFileTransacted
  3. Zápisy sa vykonávajú do súborov
  4. Súbory sú zatvorené CloseHandle
  5. Transakcia je viazaná s CommitTransaction
  6. Súbory sú opätovne otvorené CreateFile pre čítanie / zápis

Posledný krok niekedy zlyhá s kódom chyby 3: ERROR_PATH_NOT_FOUND - Systém nemôže nájsť zadanú cestu. Pri opätovnom spustení programu sa nájde súbor. Stáva sa to zriedka, ale úplne náhodným spôsobom, čo nie vždy znamená pri opätovnom otvorení rovnakého súboru.

Mojou teóriou je, že ak ukončíme transakciuWindows trvá dlho čas, súbory nie sú k dispozícii na otvorenie v režime čítania / zápisu, kým sa nezobrazí transakcia sa ukončí. Môj program potom pri pokuse o otvorenie zlyhá vlastné súbory v režime bez transakcií.

Myslím si, že ak sa chcete vyhnúť tomuto problému, musím čakať na transakciu dokončiť pred opätovným otvorením súborov. Nenašiel som však žiaden zdokumentovaný spôsob, ako to urobiť.

odpovede:

1 pre odpoveď č. 1

Žiadne chytré odpovede, takže som musel implementovať svoju vlastnú figurínu:

Ak sa pri otváraní súboru vyskytne chyba vstupu / výstupubol práve zatvorený, riešenie bolo niekoľkokrát otvárať slučku počas volania Spánok () na uvoľnenie CPU predtým, ako sa rozhodne, že došlo k katastrofickej chybe.

Dummy riešenie, ale vyriešil problém.