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:

CreateTransactionMoveFileTransactedCommitTransaction

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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage