簡體   English   中英

如何捕獲文件復制/移動事件的詳細信息,例如源文件名

[英]How to catch the details of the file copy/move event, such as the source file name

只想寫一個應用程序來跟蹤磁盤中文件之間的關系。

我們知道FileSystemWatcher可以在創建,重命名或刪除文件時觸發evetns。

但是FileSystemWatcher無法告訴我們源文件的路徑。

例如,假設在folder1有一個文件F1 ,然后我們將F1復制到另一個名為folder2的文件夾,新文件名仍然是F1 在這種情況下, FileSystemWatcher可以告訴我們在folder2創建了一個新文件。 但它無法告訴我們新的F1是從folder1F1復制的,而這些信息就是我們所需要的。

有什么想法嗎?

這是因為就文件系統而言,沒有“復制文件”這樣的操作。

當您運行文件復制命令時,它實際上會打開舊文件,創建新文件,將內容讀入內存,寫入新文件,然后關閉兩者。 所有文件系統都看到了寫入; 沒有用於確定數據實際來自另一個文件而沒有修改的污點跟蹤系統。

將文件副本與正常寫入文件區分開來的最后一步是更改目標的元數據以匹配源。 但同樣,文件系統不知道你為什么要更改屬性或者你正在匹配它們的文件。

文件系統只具有鏈接和取消鏈接的特殊意識。 所以移動,包括“創建內容的第二個鏈接;刪除第一個鏈接”是可檢測的。 如果復制實現為“創建標記為copy-on-write的新鏈接”,那么您可以發現它,但是copy-on-write並不是一個非常流行的文件系統功能。

問題是:您不會為文件夾“f1”觸發復制事件。

觸發文件監視文件夾1的是:更新文件,將文件從其他目錄復制到“f1”或刪除文件。

您可以嘗試在“f1”中使用兩個文件..同時將文件復制到“f2”,您可以更新第二個文件,從而觸發更新事件處理程序..........

希望這可以幫助....

暫無
暫無

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

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