Alternativen zur Verwendung von Transactional NTFS
Vorausgesetzt, dass Microsoft hatveraltetes Transaktions-NTFS (TxF):
Microsoft empfiehlt Entwicklern dringend, alternative Methoden zu verwenden, um die Anforderungen Ihrer Anwendung zu erfüllen. Viele Szenarien, für die TxF entwickelt wurde, können durch einfachere und leichter verfügbare Techniken erreicht werden. Darüber hinaus ist TxF möglicherweise in zukünftigen Versionen von Microsoft Windows nicht verfügbar.
Obwohl TxF eine leistungsstarke Reihe von APIs ist, besteht seit Windows Vista ein äußerst begrenztes Interesse der Entwickler an dieser API-Plattform, was hauptsächlich auf die Komplexität und die verschiedenen Nuancen zurückzuführen ist, die Entwickler bei der Anwendungsentwicklung berücksichtigen müssen. Aus diesem Grund erwägt Microsoft, TxF-APIs in einer zukünftigen Windows-Version nicht mehr zu verwenden, um die Entwicklungs- und Wartungsarbeiten auf andere Funktionen und APIs zu konzentrieren, die für eine größere Mehrheit der Kunden von größerem Wert sind.
Das heißt, ich brauche eine Alternative zu:
CreateTransaction
MoveFileTransacted
CommitTransaction
Meine Transaktionsanforderungen sind recht einfach: Verschieben Sie 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, mich umzudrehenMoveFile
in zuCopyFile
+ 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 hatte gehofft auf einegut Lösung, keine fehlerhafte Lösung. Also versuche ich es nochmal:
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 habe gehofft auf einegut Lösung, kein Buggy.