2017-10-13 50 views
2

我正在編寫一個工具來偵聽一個位置,最好是遠程位置,如果創建了一個新的文件夾或文件,它會將它下載到本地位置。如何知道在Windows中是否完成複製?

目前我正在用FileSystemWatcher收聽遠程文件夾,當創建一個新的文件夾/文件時,我啓動一個計時器,如果計時器達到X分鐘,它開始將其複製到本地。 在「監視」文件夾中創建新文件夾或文件觸發器FileSystemWatcher.Changed但它有時會失敗,如果有很多子目錄,並且如果有一個大文件複製到監視文件夾,它只在複製開始時檢測到它並且我的計時器可以完成,直到完成。

所以: 我有3個遠程計算機/位置,一個Ç

一個開始對某些文件夾/文件複製到Ç監聽到B

如何Ç檢查,如果一個完成帶或不帶FileSystemWatcher複製? 我不想經常比較BC並複製其餘的文件。

我查了其他問題,但他們沒有回答,或者我已經實施了這些解決方案。 1,2,3

+0

如果這是可行的,你可以使用一個臨時的XXX。$$$ tmp文件名,而複製和重命名爲原來的文件名,一旦複製操作完成。然後,您可以定期掃描目標計算機上不存在的非臨時文件。 –

+0

幾乎每一個關於FSW的問題,都有很多討論這個問題。計時器並不意味着什麼,你不知道其他進程正在忙於複製文件,在運行什麼機器以及需要多長時間。保持定時器,但將其間隔設置爲較低值,如100毫秒。並繼續嘗試,最終你可以打開文件。 –

+0

這是用的:https:// stackoverflow。com/questions/876473/is-there-a-way-to-check-if-a-file-is-use- – PaulF

回答

4

我想你是問關於系統更改日誌。也就是說,在您檢測到需要複製文件的時間以及您真正開始複製時,總會有文件正在使用,已被刪除,更新等情況。這裏有一篇舊的但準確的文章,可以給你更多的細節。

http://www.microsoft.com/msj/0999/journal/journal.aspx

從文章摘要:

「Windows 2000的更改日誌包含一個NTFS 5.0捲上的文件或目錄的每次修改的列表數據庫中的每個卷有自己的更改日誌數據庫,其中包含反映該卷的文件和目錄發生的更改的記錄。「

向下滾動到標題ReasonMask and ReturnOnlyOnClose

+0

這裏是一個可用於開始瀏覽現代[MSDN]的鏈接(https:// msdn。 microsoft.com/en-us/library/windows/desktop/hh802706%28v=vs.85%29.aspx)從閱讀文章後的底部看,在答案中提到。 –

相關問題