我有一個FileSystemWatcher
,我想觸發一個OnCreated event
用於複製到監控目錄每個文件夾。手動將幾個文件夾一次性複製到此目錄中。FileSystemWatcher的OnCreated只燒製的多個文件中第一個文件複製
目前它只爲第一個文件夾複製event
。
所以,如果我在Windows資源管理器看文件夾X和選擇文件夾A,B,C,並將它們複製到X,OnCreated
時,會引發A而非B或C.
這是我的代碼,我通過成立FileSystemWatcher
:
watcher = new System.IO.FileSystemWatcher(watchPath);
watcher.InternalBufferSize = 32768;
watcher.IncludeSubdirectories = true;
watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName |
NotifyFilters.CreationTime | NotifyFilters.LastWrite;
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnCreated);
watcher.EnableRaisingEvents = true;
,這裏是我的OnCeated
方法
void OnCeated(object sender, FileSystemEventArgs e)
{
XDocument xmlDoc = BeginImport(e.FullPath);
}
任何想法這是爲什麼只有觸發事件的第一個文件夾複製到監視目錄中?
+1 @ELG可能跟蹤上次處理文件的日期,然後處理任何帶有日期gt的文件。 – Paparazzi
就是這樣,謝謝!我將緩衝區設置爲允許的最大值(64k),關閉包含子目錄,並且僅對CreationTime和DirectoryName進行過濾,並且一次處理至少50個目錄。 – ELG
創建自己的緩衝區也很有幫助;有通知時添加的併發隊列,然後在該隊列上運行。只要基於文件更改所做的工作比將代表對象添加到隊列中的工作(通常是這種情況)所花費的時間更長,這會使丟失的文件更改的可能性降低。 –