Alternatywy do korzystania z transakcyjnego NTFS

Biorąc pod uwagę, że Microsoft maprzestarzałe transakcyjne NTFS (TxF):

Firma Microsoft zdecydowanie zaleca programistom wykorzystanie alternatywnych środków w celu osiągnięcia potrzeb aplikacji. Wiele scenariuszy, dla których opracowano TxF, można osiągnąć dzięki prostszym i łatwiej dostępnym technikom. Ponadto TxF może nie być dostępny w przyszłych wersjach systemu Microsoft Windows.

Podczas gdy TxF jest potężnym zestawem interfejsów API, od czasu Windows Vista zainteresowanie programistów tą platformą API jest bardzo ograniczone, głównie ze względu na jej złożoność i różne niuanse, które deweloperzy muszą wziąć pod uwagę w ramach tworzenia aplikacji. W związku z tym firma Microsoft rozważa wycofanie interfejsów API TxF w przyszłej wersji systemu Windows, aby skoncentrować wysiłki związane z rozwojem i konserwacją na innych funkcjach i interfejsach API, które mają większą wartość dla większości klientów.

Oznacza to, że potrzebuję alternatywy dla:

CreateTransactionMoveFileTransactedCommitTransaction

Moje spełnione wymagania są dość proste - przenieś dwa pliki:

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);
}

myślałem o skręceniuMoveFile wCopyFile + DeleteFile:

CopyFile(testResults, testResultsArchive); //throws if there's a problem
CopyFile(cdcResponse, cdcResponseArchive); //throws if there's a problem

DeleteFile(testResults);
DeleteFile(cdcResponse);

Ale miałem nadzieję nadobry rozwiązanie, a nie rozwiązanie buggy. Więc spróbuję ponownie:

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);
}

Tyle że miałem nadzieję nadobry rozwiązanie, a nie buggy.

questionAnswers(2)

yourAnswerToTheQuestion