2010-06-02 105 views
3

我正在使用FileSystemWatcher來監控文件夾,它似乎阻止了文件夾的被刪除,但不會阻止文件夾本身被刪除。FileSystemWatcher保留父目錄

例如,我有文件結構:

C:\Root\FolderToWatch\... 

FileSystemWatcher定位FolderToWatch。當我的程序運行時,如果我轉到Windows資源管理器並嘗試刪除Root,我收到錯誤「無法刪除Root:訪問被拒絕」。

但是,如果我刪除FolderToWatch FIRST,我可以刪除Root而不會發生意外。

這裏有一些代碼,如果你想玩它:

static void Main(string[] args) { 

    var watcher = new FileSystemWatcher(@"C:\Root\FolderToWatch"); 

    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
     | NotifyFilters.FileName | NotifyFilters.DirectoryName; 

    watcher.Changed += (sender, e) => Console.WriteLine(e.FullPath); 
    watcher.Created += (sender, e) => Console.WriteLine(e.FullPath); 
    watcher.Deleted += (sender, e) => Console.WriteLine(e.FullPath); 
    watcher.Renamed += (sender, e) => Console.WriteLine(e.FullPath); 

    watcher.EnableRaisingEvents = true; 

    Console.WriteLine("Press \'q\' to quit."); 
    while (Console.Read() != 'q'); 
} 

爲什麼FileSystemWatcher像這樣掛在它的目標的父級上,而不是目標本身?

回答

1

這是因爲通過刪除根文件夾,您也可以隱式地刪除它包含的所有文件夾,在您的示例「FolderToWatch」中的namley將由FileSystemWatcher進程擁有。

享受!

+7

但是,如果這就是原因,爲什麼直接刪除'FolderToWatch'? – 2010-06-02 20:45:06