[英]FileSystemWatcher - 3 events during File copy
就是這樣,每次FileSystemWatcher將文件復制到FileWatcher文件夾時都會生成3個事件
示例:使用File.Copy(source,watcherFolder,將文件復制到FileWatcher文件夾)時, 創建 - >已更改 - >已更改 (在新文件期間)或已更改 - >已更改 - >已更改 (在覆蓋現有文件期間)事件真正)。
復制不同大小的文件(1kb,67kb,100MB,500MB,1GB文件)時會收到3個事件。 我已經在FileSystemWatcher中注冊了Created和Changed事件
如果您的問題是關於您收到的多個事件,這是正常行為。 文件復制可以引發多個事件。
您可以檢查FileSystemEventArgs.ChangeType中的更改並忽略某些事件。 這是WatcherChangeTypes枚舉 。
看一下FileSystemWatcher備注。
關於Created事件,它將在目標文件夾中引發。
例如,您創建兩個FileSystemWatcher實例。 FileSystemWatcher1設置為觀看“C:\\ My Documents”,FileSystemWatcher2設置為觀看“C:\\ Your Documents”。 如果將文件從“我的文檔”復制到“您的文檔”中,FileSystemWatcher2將引發Created事件,但不會為FileSystemWatcher1引發任何事件。 與復制不同,移動文件或目錄會引發兩個事件。 在上一個示例中,如果您將文件從“我的文檔”移動到“您的文檔”,則FileSystemWatcher2將引發Created事件,FileSystemWatcher1將引發Deleted事件。
如評論中所述,您應該查找正在創建的文件,然后嘗試文件鎖定以確定它是否已完全復制。
while ($true)
{
try{
[IO.file]::openwrite("<insert file path>").close()
break
}
catch { start-sleep -Seconds 60 }
}
如果您控制文件復制操作,一件簡單的事情就是使用臨時名稱創建文件,並在復制后重命名該文件。 讓FileSystemWatcher
監視Rename
事件。 此事件僅觸發一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.