2014-05-22 196 views
2

我的FileSystemWatcher沒有拋出任何事件。我已經看過這些類似的問題,似乎沒有一個答案是我的問題:FileSystemWatcher不觸發事件

*編輯:我的目標是捕獲何時將XLS文件複製到或創建在目錄中。

Monitor類:

public class Monitor 
{ 
    FileSystemWatcher watcher = new FileSystemWatcher(); 
    readonly string bookedPath = @"\\SomeServer\SomeFolder\"; 

    public delegate void FileDroppedEvent(string FullPath); 
    public event FileDroppedEvent FileDropped; 

    public delegate void ErrorEvent(Exception ex); 
    public event ErrorEvent Error; 

    public Monitor() 
    { 
     watcher.Path = bookedPath; 
     watcher.Filter = "*.xls"; 
     watcher.NotifyFilter = NotifyFilters.LastWrite; 
     watcher.Changed += new FileSystemEventHandler(watcher_Changed); 
     watcher.Error += new ErrorEventHandler(watcher_Error); 
    } 

    void watcher_Error(object sender, ErrorEventArgs e) 
    { 
     Error(e.GetException()); 
    } 

    void watcher_Changed(object sender, FileSystemEventArgs e) 
    { 
     if (e.ChangeType != WatcherChangeTypes.Created) return; 
     FileDropped(e.FullPath); 
    } 

    public void Start() 
    { 
     watcher.EnableRaisingEvents = true; 
    } 

    public void Stop() 
    { 
     watcher.EnableRaisingEvents = false; 
    } 
} 

簡單的形式與列表框:

public partial class Form1 : Form 
{ 
    Monitor monitor = new Monitor(); 

    public Form1() 
    { 
     InitializeComponent(); 
     FormClosing += new FormClosingEventHandler(Form1_FormClosing); 
     Load += new EventHandler(Form1_Load); 
     monitor.FileDropped += new Monitor.FileDroppedEvent(monitor_FileDropped); 
     monitor.Error += new Monitor.ErrorEvent(monitor_Error); 
    } 

    void Form1_Load(object sender, EventArgs e) 
    { 
     monitor.Start(); 
    } 

    void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     monitor.Stop(); 
    } 

    void monitor_Error(Exception ex) 
    { 
     listBox1.Items.Add(ex.Message); 
    } 

    void monitor_FileDropped(string FullPath) 
    { 
     listBox1.Items.Add(FullPath); 
    } 
} 

我在做什麼錯?

+0

用戶代碼是否可以訪問網絡路徑運行? – adrianbanks

+0

是的。我正在運行它,我有權訪問 – DontFretBrett

+0

您可能會發現以下線程有用:http://stackoverflow.com/questions/11219373/filesystemwatcher-to-watch-unc-path – Edin

回答

-1

你的問題是過濾器以及我相信你的事件。只有打開文件時纔會觸發NotifyFilters.LastAccess。嘗試使用:

NotifyFilters.LastWrite | NotifyFilters.CreationTime 

這將觀察寫入/創建的文件。接下來,掛接到Created委託來處理新創建的文件:

watcher.Created += YourDelegateToHandleCreatedFiles 

的方式FileSystemWatcher作品是第一次使用NotifyFilters來限制事件觸發。然後,你使用實際的事件來完成這項工作。通過連接Created事件,您只能在創建文件時進行工作。

+0

我會試試這個,但我真的只想捕獲一個新文件被創建或複製到目錄。 – DontFretBrett

+0

然後你只想聽'NotifyFilters.LastWrite | NotifyFilters.CreationTime' – Haney

+0

我嘗試了你的建議,但它仍然沒有開火:/ – DontFretBrett

2

試試看。爲我工作的任務非常類似。

watcher.NotifyFilter = NotifyFilters.FileName; 
watcher.Created += new FileSystemEventHandler(handler);  
watcher.Renamed += new RenamedEventHandler(handler); 
+0

試過了,將文件複製到目錄中。沒有任何事情發生我在watcher_change事件中設置了一個斷點,所以它不是我的自定義事件的問題。不過謝謝 – DontFretBrett

0

這可能是因爲文件元數據尚未更新。如果您不斷寫入文件,可能會發生這種情況。