2016-12-01 50 views
2

FileSystemWatcher:如何僅在目錄中的新文件上升事件?FileSystemWatcher:如何僅在目錄中的新文件上升事件?

我有一個目錄,其中我的服務掃描。我用FileSystemWatcher

構造:

if(Directory.Exists(_dirPath)) 
{ 
    _fileSystemWatcher = new FileSystemWatcher(_dirPath); 
} 

然後,我訂閱上的目錄:

public void Subscribe() 
{ 
    try 
    { 
     //if (_fileSystemWatcher != null) 
     //{ 
     // _fileSystemWatcher.Created -= FileSystemWatcher_Created; 
     // _fileSystemWatcher.Dispose(); 
     //} 

     if (Directory.Exists(_dirPath)) 
     {      
      _fileSystemWatcher.EnableRaisingEvents = true; 
      _fileSystemWatcher.Created += FileSystemWatcher_Created; 
      _fileSystemWatcher.Filter = "*.txt";     
     }      
} 

但是,問題是,我希望在新文件創建,以獲取事件(或複製)。 相反,我從此目錄中的所有文件獲取事件已存在。

如何僅從新文件獲取事件? 謝謝!

+0

您的代碼適用於我。它只會通知新創建的文件。這就是'Created'事件應該做的事情。 – user3185569

+0

答案解決了你的問題嗎?如果是的話,不要忘記標記爲答案。 –

回答

4

通過將NotifyFilter設置爲NotifyFilters.FileName | NotifyFilters.CreationTime | NotifyFilters.LastWrite您可以觀察是否創建了新文件。

您還需要檢查e.ChangeType == WatcherChangeTypes.Created中引發的事件發生任何變化之後。

static void Main(string[] args) 
{ 
    FileSystemWatcher watcher = new FileSystemWatcher(); 
    string filePath = @"d:\watchDir"; 
    watcher.Path = filePath; 
    watcher.EnableRaisingEvents = true; 

    watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.CreationTime | NotifyFilters.LastWrite; 

    watcher.Filter = "*.*"; 
    watcher.IncludeSubdirectories = true; 
    watcher.Created += new FileSystemEventHandler(OnFileCreated); 

    new System.Threading.AutoResetEvent(false).WaitOne(); 
} 

private static void OnFileCreated(object sender, FileSystemEventArgs e) 
{ 
    if (e.ChangeType == WatcherChangeTypes.Created) 
     // some code    
} 
+1

在'FileSystemWatcher'類中有一個名爲'Changed'的事件時,將'OnCreated'事件命名爲'OnChanged',這有點令人困惑! – user3185569

+0

'e.ChangeType'是關鍵。好東西! – RBT

2

從以往的經驗我已經注意到,在編輯文件時得到引發的事件可以廣泛有所不同取決於編輯文件的應用程序。

一些應用程序覆蓋,其他追加。

我發現輪詢飄飛,並保持已在先前的調查中存在的文件列表比試圖得到正確的事件更可靠。

+0

OP希望觀察目錄中新文件的創建。追加和覆蓋與文件更新有關。 – RBT

+1

@RBT - 我注意到一些應用程序,當他們修改一個文件時,他們刪除了原始文件,然後用新的內容編寫相同的文件。對於操作系統來說,這看起來像是一個新文件,會引發新的文件事件。 –

+0

哦。這是非常有趣的發現。 – RBT

相關問題