2010-02-08 20 views
11

Tôi đang tạo ứng dụng máy chủ sao chép tệp bằng chức năng System.IO.File.Copy (...). Các tệp của tôi có thể khá lớn, do đó, nó có cơ hội công bằng nếu máy bị treo, nó xảy ra trong quá trình sao chép.Sao chép tệp nguyên tử trong .NET

Sau khi khởi động lại dịch vụ, tôi sẽ có thể nhận nhiệm vụ sao chép và tiếp tục. Làm thế nào tôi có thể phát hiện nếu một bản sao đã được hoàn thành thành công hoặc bị gián đoạn bởi sự cố máy chủ?

Gói hiện tại của tôi là sao chép tệp sang tên tạm thời và sau khi sao chép xong, hãy đổi tên thành tên cuối cùng. Bằng cách này, việc đặt tên tệp có thể mang thông tin trạng thái về sự cố.

Bạn có đề xuất nào tốt/tốt hơn không?

EDIT: Target OS là Win2003, do đó NTFS giao dịch không có sẵn

+0

Xem thêm: http://stackoverflow.com/questions/15274861/file-move-atomic -kiểm tra –

Trả lời

10

Có đề xuất giao dịch NTFS khác nếu bạn triển khai trên Vista hoặc phiên bản mới hơn. Nếu bạn cần hỗ trợ XP (hoặc phiên bản cũ hơn) thì tệp tạm thời theo sau là di chuyển (đổi tên) là giải pháp tốt nhất.

Câu trả lời cho câu hỏi tương tự này cung cấp thêm thông tin: Atomicity of File.Move