Cho rằng Microsoft đã deprecated Transactional NTFS (TxF):Alternatives để sử dụng giao dịch NTFS
Microsoft khuyến cáo nhà phát triển sử dụng phương tiện thay thế để đạt được những nhu cầu của ứng dụng của bạn. Nhiều kịch bản mà TxF đã được phát triển cho có thể đạt được thông qua các kỹ thuật đơn giản và dễ dàng hơn. Hơn nữa, TxF có thể không có sẵn trong các phiên bản tương lai của Microsoft Windows.
Trong khi TxF là một tập hợp API mạnh mẽ, đã có rất ít sự quan tâm của nhà phát triển trong nền tảng API này vì Windows Vista chủ yếu là do sự phức tạp và các sắc thái khác nhau mà nhà phát triển cần xem xét như một phần của phát triển ứng dụng. Kết quả là, Microsoft đang xem xét việc không dùng API TxF trong phiên bản Windows tương lai để tập trung nỗ lực phát triển và bảo trì trên các tính năng và API khác có giá trị hơn cho đa số khách hàng lớn hơn.
Điều này có nghĩa rằng tôi cần một thay thế cho:
yêu cầu giao dịch của tôi là khá đơn giản - di chuyển hai tập tin:
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);
}
tôi đã nghĩ đến việc quay MoveFile
để CopyFile
+ DeleteFile
:
CopyFile(testResults, testResultsArchive); //throws if there's a problem
CopyFile(cdcResponse, cdcResponseArchive); //throws if there's a problem
DeleteFile(testResults);
DeleteFile(cdcResponse);
Nhưng tôi đã hy vọng cho một giải pháp tốt , không phải là một giải pháp lỗi. Vì vậy, tôi cố gắng một lần nữa:
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);
}
Trừ tôi đã hy vọng cho một giải pháp tốt , không phải là một lỗi.
tôi đã xem qua nguồn. Các "rollback" vẫn còn sôi xuống 'File.Delete (path);'; mà bị vấn đề có lẽ không thể xóa các tập tin. Giải pháp * "real" * liên quan đến việc sử dụng 'CreateFile' và thực hiện lại' CopyFile', để bạn có thể [hồi tiếp báo hiệu xử lý "xóa tệp khi tay cầm được đóng"] (http://stackoverflow.com/ câu hỏi/14572272/how-to-un-createfile). Nhưng nếu các vấn đề liên quan đến tính toàn vẹn giao dịch không phải là một mối quan tâm trọng (và tôi đã sử dụng .NET), tôi sẽ sử dụng một cái gì đó như thế này. Đã chấp nhận. –