2010-09-03 38 views
5

Tôi có một chủ đề thăm dò một thư mục cho các tệp mới. Vấn đề là nó thấy một tập tin mới và bắt đầu làm việc trên nó ngay cả trước khi tập tin đã được sao chép hoàn toàn bởi một tiến trình khác. Bởi vì điều này poller được tập tin được sử dụng bởi một lỗi quá trình khác.Làm thế nào để chờ đợi cho một tập tin được sao chép hoàn toàn?

Có cách nào để kiểm tra tệp miễn phí để sử dụng hoặc được thông báo không? Chúng tôi chắc chắn có thể sử dụng mã xử lý ngoại lệ, nhưng có cách nào tốt hơn không?

Tech: NET 2.0/C#

Cập nhật:

  • Phát hiện ra từ câu trả lời khác rằng nếu chúng ta có quyền truy cập vào các ứng dụng bằng văn bản cho tập tin sau đó thiết kế tốt hơn là bắt đầu với một số phần mở rộng khác .tmp và sau đó đổi tên nó sau khi sao chép.

  • Các FileStream.Lock thể được sử dụng nếu chúng ta không kiểm soát các ứng dụng mã nguồn

+2

Xem http://stackoverflow.com/questions/750471/how-to-know-whether-a-file-copying-is-in-progress-complete-in-java-1-6/750521#750521 cho một số câu trả lời chung. Có thể có điều gì đó tốt hơn cho một nền tảng cụ thể (ví dụ: Windows .NET) nhưng câu trả lời được đề cập ở trên có hai giải pháp chung cho vấn đề. – paxdiablo

Trả lời

2

Chúng tôi cố gắng để có được một khóa trên các tập tin trước khi xử lý nó và xử lý các IOException chứ không phải là một ngoại lệ chung trong nỗ lực đọc tệp.

Xem FileStream.Lock trên MSDN.

+0

Cảm ơn. Điều này nghe có vẻ như một ý tưởng tốt hơn. – thewpfguy

Các vấn đề liên quan