Da Microsoft deprecated Transactional NTFS (TxF) hat:Alternativen zur Verwendung von Transactional NTFS
Microsoft empfiehlt dringend, Entwickler nutzen alternative bedeutet die Notwendigkeiten der Anwendung zu erreichen. Viele Szenarien, für die TxF entwickelt wurde, können durch einfachere und leichter verfügbare Techniken erreicht werden. Darüber hinaus ist TxF in zukünftigen Versionen von Microsoft Windows möglicherweise nicht verfügbar.
Während TxF ein leistungsstarker Satz von APIs ist, gab es ein extrem begrenztes Entwicklerinteresse an dieser API-Plattform seit Windows Vista hauptsächlich aufgrund seiner Komplexität und verschiedenen Nuancen, die Entwickler als Teil der Anwendungsentwicklung berücksichtigen müssen. Aus diesem Grund erwägt Microsoft, TxF-APIs in einer zukünftigen Version von Windows abzuschaffen, um die Entwicklungs- und Wartungsanstrengungen auf andere Funktionen und APIs zu konzentrieren, die für eine größere Mehrheit von Kunden einen höheren Wert haben.
Das bedeutet, dass ich eine Alternative zu müssen:
Meine getätigten Anforderungen sind ziemlich einfach - bewegen zwei Dateien:
tx = BeginTransaction();
{
MoveFile(testResults, testResultsArchive); //throws if there's a problem
MoveFile(cdcResponse, cdcResponseArchive); //throws if there's a problem
CommitTransaction(tx);
}
finally
{
CloseHandle(tx);
}
Ich habe darüber nachgedacht, MoveFile
Drehen um CopyFile
+ DeleteFile
:
CopyFile(testResults, testResultsArchive); //throws if there's a problem
CopyFile(cdcResponse, cdcResponseArchive); //throws if there's a problem
DeleteFile(testResults);
DeleteFile(cdcResponse);
Aber ich für eine Lösung gute Lösung, kein Buggy hatte gehofft. Also versuche ich wieder:
CopyFile(testResults, testResultsArchive); //throws if there's a problem
CopyFile(cdcResponse, cdcResponseArchive); //throws if there's a problem
try
{
DeleteFile(testResults);
}
catch (Exception e)
{
DeleteFile(testResultsArchive);
throw e;
}
try
{
DeleteFile(cdcResponse);
}
catch (Exception e)
{
DeleteFile(cdcResponseArchive);
}
Außer ich für eine gute Lösung gehofft wurde, kein Buggy ein.
Ich schaute auf die Quelle. Der "Rollback" läuft immer noch auf 'File.Delete (path);'; Das Problem ist möglicherweise nicht in der Lage, die Datei zu löschen. Die * "echte" * Lösung beinhaltet die Verwendung von 'CreateFile' und das erneute Implementieren von' CopyFile', so dass Sie das Handle rückwirkend anweisen können, "Datei zu löschen, wenn das Handle geschlossen ist" (http://stackoverflow.com/) Fragen/14572272/how-to-un-createfile). Aber wenn die Probleme, die mit der transaktionalen Integrität verbunden sind, kein vorrangiges Problem darstellen (und ich .NET verwende), würde ich etwas wie dieses verwenden. Akzeptiert. –