Có nhiều bài đăng trên internet về chức năng API ReadDirectoryChangesW thiếu tệp khi có nhiều hoạt động tệp. Hầu hết đổ lỗi cho tốc độ mà tại đó vòng lặp chức năng ReadDirectoryChangesW được gọi. Đây là một giả định không chính xác. Lời giải thích tốt nhất mà tôi đã thấy là trong các bài sau đây, nhận xét về thứ hai 14 tháng 4, 2008 14:15:27Cách giữ ReadDirectoryChangesW khỏi các thay đổi tệp bị thiếu
http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/
Bản tóm tắt là báo cáo chức năng ReadDirectoryChangesW nộp thay đổi khi chúng rời khỏi hàng đợi tập tin-ghi-đằng sau, không phải khi chúng được thêm vào. Và nếu quá nhiều được thêm trước khi được cam kết, bạn sẽ mất thông báo về một số trong số đó. Bạn có thể thấy điều này với việc triển khai của mình, nếu bạn chỉ viết một chương trình để tạo ra 1000 tệp trong một thư mục thật nhanh. Chỉ cần đếm có bao nhiêu thông báo sự kiện tập tin bạn nhận được và bạn sẽ thấy có những lúc bạn sẽ không nhận được tất cả chúng.
Câu hỏi đặt ra là, có ai đã tìm thấy phương pháp đáng tin cậy để sử dụng chức năng ReadDirectoryChangesW mà không phải xóa âm lượng mỗi lần không? Điều này không được phép nếu người dùng không phải là Quản trị viên và cũng có thể mất chút thời gian để hoàn thành.
Điều này sẽ hoạt động trong khoảng 99% thời gian. Điều gì sẽ xảy ra nếu một tệp trong thư mục khác (một tệp khác có nhiều thay đổi tệp) là tệp bị bỏ qua. Bạn sẽ quét một thư mục để thay đổi nhưng bỏ lỡ một thay đổi trong một tệp khác. –
Lớp FileSystemWatcher là một cách .NET để bọc ReadDirectoryChangesW, vì vậy không, điều đó không giúp ích gì. – Garen
Câu trả lời của tôi là tìm hiểu thêm về các sự kiện trong một khoảng thời gian để kích hoạt giải pháp thay thế cho ReadDirectoryChangesW. – hova