簡體   English   中英

掃描更改的文件

[英]Scan for changed files

我正在尋找一種有效的方法來掃描Windows XP +中更改文件的目錄結構。 就像git的工作方式一樣,這正是我要尋找的東西,當運行git status它會很快顯示所有修改過的文件,所有新的(未跟蹤的)文件和已刪除的文件,這正是我想要做的。

我有一個運行中的基本模型,該模型執行初始掃描並存儲所有文件名,大小,日期和屬性。

在隨后的掃描中,它檢查大小,屬性或日期是否已更改,並將其標記為已更改的文件。

我的問題現在是檢測移動和刪除的文件。 有沒有一種經過實踐檢驗的方法來處理這種事情? 我正在努力想出一種好的方法。

我應該提到,它最終將使用ReadDirectoryChangesW監視文件並在發生更改時向用戶發出警報,因此完全掃描實際上是初始掃描之后的最后一招。

謝謝,J

編輯:我想我可能已經嚴重描述了問題。 我面臨的問題不是檢測更改,而是在多個線程上使用IOCP的ReadDirectoryChangesW()來檢測更改發生的時間,問題更多是如何處理信息。 例如,移動的文件報告為刪除,然后創建,重命名分為兩部分,即舊名稱和新名稱。 因此,我要問的是如何區分作為移動一部分的刪除和實際刪除。 我猜想緩沖更改並處理批處理是一種選擇,但感覺很混亂。

在本機代碼中, FileSystemWatcherReadDirectoryChangesW取代。 正確使用這個並不簡單,有一個很好的基線建立過這里

我在以前的工作中使用過此代碼,並且效果很好。 Win32 API本身(和FileSystemWatcher )很容易出現文檔中描述的問題,並且在網上的各個地方都對此進行了討論,但是這些問題的影響將取決於您的用例。

編輯:確切的更改將在您返回的FILE_NOTIFY_INFORMATION結構中指示-添加,刪除,重命名包括舊名稱和新名稱的數據。

我投票贊成Liviu M. 但是,如果由於某種原因不想使用.NET框架,則另一個選擇是使用基本的Win32 API調用FindFirstChangeNotification

如果可以,您可以使用USN日記,這是相當低的級別(NTFS級別)的東西。

在這里,您可以找到包括的詳細信息和源代碼。 它是用C#編寫的,但大多數是P調用C / C ++函數。

暫無
暫無

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

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