簡體   English   中英

FileSystemWatcher - 文件復制期間的3個事件

[英]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.

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