Tôi có một chương trình chạy dưới dạng Dịch vụ Windows; nó xử lý các tệp trong một thư mục cụ thể. Vì nó là một dịch vụ, nó liên tục theo dõi một thư mục cho các tệp mới đã được thêm vào. Một phần công việc của chương trình là thực hiện so sánh các tệp trong thư mục đích và gắn cờ các tệp không phù hợp. Những gì tôi muốn làm là có thể phát hiện nếu một hoạt động sao chép đang được tiến hành và khi nó đã hoàn thành, do đó theo cách đó một tập tin không bị gắn cờ sớm nếu nó khớp với tập tin chưa được sao chép sang thư mục đích.C# - Đang đợi thao tác sao chép hoàn tất
Điều tôi đã nghĩ đến khi làm là sử dụng FileSystemWatcher để xem thư mục đích và xem hoạt động sao chép có đang diễn ra hay không. Nếu có, tôi đưa chủ đề chính của chương trình vào trạng thái ngủ cho đến khi thao tác sao chép hoàn tất, sau đó tiếp tục thực hiện thao tác trên thư mục như bình thường. Tôi chỉ muốn có được một số hiểu biết về cách tiếp cận này và xem nó có hợp lệ hay không; nếu bất cứ ai khác có cách tiếp cận độc đáo khác cho vấn đề này, nó sẽ được đánh giá cao.
UPDATE:
Cảm ơn tất cả các bạn cho ý kiến của bạn
UPDATE 2:
tôi xin lỗi vì sự nhầm lẫn, khi tôi nói mục đích, ý tôi là thư mục nguồn chứa tất cả các file tôi muốn để xử lý. Một phần chức năng của chương trình của tôi là sao chép cấu trúc thư mục của thư mục nguồn vào thư mục đích và sao chép tất cả các tệp hợp lệ vào thư mục đích đó, giữ nguyên cấu trúc thư mục của thư mục nguồn gốc, tức là người dùng có thể sao chép các thư mục chứa tệp vào thư mục nguồn. Tôi muốn ngăn chặn lỗi bằng cách đảm bảo rằng nếu một tập hợp thư mục mới chứa nhiều thư mục con và tệp được sao chép vào thư mục nguồn để xử lý, chương trình của tôi sẽ không bắt đầu hoạt động trên thư mục đích cho đến khi quá trình sao chép hoàn tất.
+1. Đó là một câu hỏi rất hay. Tôi chưa nghĩ ra cách tiếp cận mà không có cảm giác như là hack. – David
Câu hỏi này tương tự và có một số câu trả lời hay: http://stackoverflow.com/questions/30074/monitoring-files-how-to-know-when-a-file-is-complete – mfdoran