Jak používat transakční systém souborů NTFS
Popisovače transakčně spravovaných souborů
Transakční NTFS (TxF) váže popisovač souboru k transakci. U operací, které pracují s popisovačem (například funkce ReadFile a WriteFile), se skutečné volání funkce API nezmění. U operací se soubory, které vyžadují jméno souboru, existují explicitní transakční funkce pro tyto operace. Například místo volání CreateFile, volání CreateFileTransacted. Tím se vytvoří popisovač transakčního souboru, který se pak dá použít pro všechny operace s požadavkem na popisovač. Všechny následné operace používající tento popisovač jsou transakční operace.
Základní využití TxF
Následující série kroků představuje nejzásadnější použití pro TxF. Složitější scénáře jsou také podporovány podle uvážení návrháře aplikací.
- Vytvořte transakci voláním funkce KTM CreateTransaction nebo pomocí rozhraní IKernelTransaction Koordinátoru distribuovaných transakcí (DTC).
- Získejte popisovače souborů s transakcí voláním CreateFileTransacted.
- Upravte soubor(y) podle potřeby pomocí transakčních popisovač(ů) souborů.
- Zavřete všechny popisovače souborů přidružené k transakci vytvořené v kroku 1.
- Potvrďte nebo přerušte transakci voláním odpovídající funkce KTM nebo DTC.
Klíčové body programovacího modelu TxF
Programovací model TxF obsahuje následující klíčové body, které byste měli zvážit při vývoji aplikace TxF:
- Důrazně doporučujeme, aby aplikace před potvrzením nebo vrácením transakce zavřela všechny popisovače transakčních souborů. Systém zruší platnost všech transakčních popisovačů, když transakce skončí. Jakákoli operace provedená na transakčním popisovači, s výjimkou uzavření, po ukončení transakce vrátí následující chybu: ERROR_HANDLE_NO_LONGER_VALID.
- Soubor se zobrazuje jako jednotka úložiště. Podporují se částečné aktualizace a úplné přepsání souborů. Více transakcí nemůže současně upravovat stejný soubor.
- Paměťově mapovaný vstup/výstup je transparentní a konzistentní s běžným souborovým I/O. Aplikace musí před potvrzením transakce vyprázdnit a zavřít otevřený oddíl. Pokud to neuděláte, může dojít k částečným změnám mapovaného souboru v rámci transakce. Vrácení zpět se nezdaří, pokud se to neprovede.
Běžné chyby programování
Při vývoji transactovaných aplikací může dojít k následujícím běžným chybám:
- Použití popisovače souboru po dokončení transakce.
- Nepodařilo se zavřít deskriptory odstraněných souborů a adresářů před dokončením transakce, což zabrání provedení operací odstranění. Tato událost musí nastat před provedením potvrzení operace odstranění, aby byla považována za součást transakce. Důvodem je, že systém ve skutečnosti neodstraní soubor, dokud není zavřen poslední popisovač k němu, a to ani když operace není transakční, jako součást subsystému vstupně-výstupních operací systému Windows.
- Nepočítání se zpětným vracením transakcí iniciovaných systémem, k čemuž může dojít kdykoli; například transakce je vrácena zpět, pokud jsou vyčerpány systémové prostředky.