Bạn đang làm điều đúng với FileSystemWatcher
. Windows không có bất kỳ cơ chế tích hợp nào để báo cáo các bản sao một cách đáng tin cậy.
Bạn có thể treo thường trình sao chép hệ điều hành, nhưng điều này sẽ không đảm bảo cho bạn kết quả tốt: ứng dụng được tự do triển khai bản sao của riêng mình bằng cách chỉ mở tệp nguồn và đích và sao chép byte.
Đổi tên khác nhau vì việc đổi tên được thực hiện bởi hệ điều hành không thể dễ dàng bắt chước thông qua các phương tiện khác, vì vậy bạn sẽ bắt được tất cả đổi tên bằng FileSystemWatcher
. Lưu ý rằng việc di chuyển giữa các ổ đĩa giống như bản sao: bạn sẽ không nhận được thông báo được Đổi tên, nhưng thay vào đó là Tạo và Xóa.
Vì vậy, nếu bạn thực sự thực sự cần phải nhận thấy một tập tin bị sao chép, cách tiếp cận đề nghị của tôi là thế này:
- Hook các
CloseFile
cuộc gọi, ngoài các FileSystemWatcher
.
- Bất cứ khi nào tệp bị đóng, có thể là do đó là nguồn hoặc mục tiêu của di chuyển sao chép/chuyển ổ đĩa chéo. Kiểm tra kích thước của nó.
- Nếu bạn tìm thấy hai tệp đã đóng có cùng kích thước trong một khoảng thời gian hợp lý, hãy so sánh nội dung. Khá tốn nhiều tài nguyên, nhưng cách đáng tin cậy duy nhất để làm điều này.
Nguồn
2012-01-06 15:58:10
Bạn có thể xem bản sao của khay nhớ tạm để thay thế không? Chỉ là một ý nghĩ. http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx –
Bạn có thể chịu đựng được sự thất bại khi theo dõi một bản sao như thế nào? Có thể bạn có thể theo dõi các bản sao _most_ (ví dụ: các bản sao được thực hiện thông qua Explorer), nhưng một số sẽ trượt qua. –
Tại sao bạn lại cố gắng thực hiện việc này? – RQDQ