2008-08-19 30 views
17

Tôi mới làm quen với lập trình cửa sổ và tôi đang cố gắng nhận thông báo về mọi thay đổi đối với hệ thống tệp (tương tự như thông tin mà FileMon từ SysInternals hiển thị, nhưng thông qua API). Là một FindFirstChangeNotification cho mỗi (phi mạng, không thay thế) ổ đĩa đặt cược tốt nhất của tôi hoặc là có C/C++ API phù hợp hơn?Có phải FindFirstChangeNotification API tốt nhất để sử dụng cho thông báo thay đổi hệ thống tệp trên các cửa sổ không?

Trả lời

22

FindFirstChangeNotification là tốt, nhưng đối với sức mạnh tối thượng hơn một chút bạn nên sử dụng ReadDirectoryChangesW. (Trong thực tế, nó thậm chí còn đề nghị trong tài liệu!)

Nó không đòi hỏi một con trỏ hàm, nó không yêu cầu bạn phải bằng tay giải mã một bộ đệm thô, nó sử dụng tên tập tin Unicode, nhưng nó thường là tốt hơn và linh hoạt hơn.

Mặt khác, nếu bạn muốn thực hiện những gì FileMon thực hiện, bạn có thể làm những gì FileMon thực hiện và sử dụng IFS to create and install a file system filter.

+0

Tôi đã đi cho ReadDirectoryChangesW cuối cùng và đã vui vẻ làm việc ra làm thế nào để chuyển đổi bộ đệm trở lại vào một hình thức tôi có thể quay trở lại mã Java của tôi, nhưng nó chắc chắn làm những gì tôi muốn. –

+0

tội lỗi tôi bị bỏ rơi do tai nạn bây giờ tôi không thể upvote – clyfe

0

Có nhiều cách khác để làm điều đó, nhưng hầu hết trong số họ liên quan đến nỗ lực từ phía bạn (hoặc lấy hiệu suất từ ​​ứng dụng của bạn hoặc bạn phải chặn một chuỗi để sử dụng chúng, v.v.). FindFirstChangeNotification là một chút phức tạp nếu bạn không được sử dụng để đối phó với con trỏ chức năng, vv, nhưng nó có đức hạnh của việc hệ điều hành để làm phần lớn công việc cho bạn.

-1

Bạn có thể sử dụng lớp FileSystemWatcher. Rất hiệu quả nhưng không thể làm việc với các ổ đĩa chia sẻ mạng.

0

Thực ra FileSystemWatcher hoạt động hoàn hảo với các ổ đĩa mạng dùng chung. Tôi đang sử dụng nó ngay bây giờ trong một ứng dụng, trong số những thứ khác, theo dõi hệ thống tập tin để thay đổi. (www.tabbles.net).