簡體   English   中英

Win32 C++ ReadDirectoryChangesW 文件差異檢測的“創建”和“修改”?

[英]Win32 C++ ReadDirectoryChangesW “creation” and “modification” of file difference detect?

這是問題所在:我使用 Win32 API ReadDirectoryChangesW函數監視目錄。 而且我需要區分新創建的文件和修改過的文件。 但是有問題......一如既往:(

案例:

  1. 我監視新/修改目錄( FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_SIZE )。 問題:創建文件后,觸發新建文件事件+修改文件事件。 但我只需要一個。 我怎樣才能避免這種情況? 當文件被修改時,我得到了我想要的:)。
  2. 我僅為新文件( FILE_NOTIFY_CHANGE_FILE_NAME )監視目錄 - 沒有問題。
  3. 我監視目錄僅用於修改文件( FILE_NOTIFY_CHANGE_SIZE )。 問題:當有新文件時,修改操作與文件創建事件一起被觸發。 我怎樣才能避免這種情況?

當然,我實施了一些解決方法。 但是,我想知道是否有任何優雅的方法來處理我描述的問題。

對於修改后的文件,您應該捕獲FILE_NOTIFY_CHANGE_LAST_WRITE ,而不是FILE_NOTIFY_CHANGE_SIZE 可以在不改變大小的情況下修改文件。

您還應該保留一個更改隊列及其發生的時間,並且僅在過去 1-2 秒內沒有更改后才處理該隊列。 一些應用程序在創建或修改文件時可能會做一些非常奇怪的事情,如果您打算在野外使用這些代碼,您很可能希望對流行的應用程序進行特殊處理。

ReadDirectoryChanges不是最友好的 winapi 函數之一。 您可能無法避免在文件創建時接收兩個事件; 我不完全確定您是否會在創建時對FILE_NOTIFY_CHANGE_LAST_WRITE進行額外修改,但我認為您可能會。 如果額外事件與創建事件具有相同的時間戳,則使用隊列方法將允許您輕松丟棄額外事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM