2010-02-18 34 views
13

Tôi đã sử dụng TransactionScope để làm việc với cơ sở dữ liệu và nó cảm thấy tốt đẹp. Những gì tôi đang tìm kiếm như sau:TransactionScope Với tập tin trong C#

using(var scope=new TransactionScope()) 
{    
    // Do something with a few files... 
    scope.Complete(); 
} 

nhưng rõ ràng điều này không làm việc - nếu có 20 tác phẩm, và một ngoại lệ xảy ra vào file thứ 9, tất cả trước 8 vẫn thay đổi và phần còn lại không thay đổi - không khôi phục được thực hiện. Vậy, cách tốt nhất để thực hiện hành vi giống như phạm vi cho các tệp là gì?

Tôi hy vọng có một câu trả lời đơn giản, nhưng nếu không, bạn có thể cho tôi một vài gợi ý hay chỉ cho tôi một bài viết liên quan không?

Trả lời

6

Bạn đang tìm kiếm Transactional NTFS, được giới thiệu bởi Windows Vista.

Here is a managed wrapper.

+0

Xin cảm ơn, dường như đó chính xác là những gì tôi đang tìm kiếm. – avance70

+2

Thật không may, wrapper quản lý của họ kết thúc tốt đẹp mỗi chức năng trong một phạm vi giao dịch của riêng mình. Tôi phải tạo ra tình trạng quá tải cho phép tôi vượt qua phạm vi của mình. –

+3

Chỉ cần FYI, Microsoft đang xem xét việc ngừng giao dịch NTFS. http://msdn.microsoft.com/en-us/library/windows/desktop/hh802690%28v=vs.85%29.aspx – Nathan

3

Bạn có thể thử thư viện .NET Transactional File Manager có sẵn trên Codeplex và NuGet. Nó hỗ trợ bất kỳ hệ thống tập tin và không phải là một wrapper trên giao dịch NTFS.

Từ các mô tả dự án:

giao dịch File Manager là một API NET hỗ trợ bao gồm cả tập tin hoạt động hệ thống như sao chép tập tin, di chuyển, xóa, thêm, vv trong một giao dịch . Đó là việc triển khai System.Transaction.IEnlistmentNotification (hoạt động với System.Transactions.TransactionScope).