2014-09-19 83 views
3

我們有第三方應用程序將文件寫入目錄並刪除它。 我們希望在刪除文件之前複製該文件。使用FileSystemWatcher監視文件創建並在刪除之前將其複製

我們有這樣的:

FileSystemWatcher watcher; 

    private void WatchForFileDrop() 
    { 
     watcher = new FileSystemWatcher(); 
     watcher.Path = "c:\\FileDrop"; 
     watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName; 
     watcher.Filter = "*.txt"; 
     watcher.Created += new FileSystemEventHandler(OnCreated); 
     watcher.EnableRaisingEvents = true; 
    } 

    private void OnCreated(object source, FileSystemEventArgs e) 
    { 
     //Copy the file to the file drop location 
     System.IO.File.Copy(e.FullPath, "C:\\FileDropCopy\\" + e.Name); 
    } 

的FileSystemWatcher的確實工作。它會看到文件已經創建並轉到OnCreated()。該文件在目錄中創建。

唯一的問題是文件是空的,文件大小是0kb。

我想仔細檢查一下爲什麼文件是空的。是否因爲第三方應用程序很快刪除了該文件,因此它沒有機會進行正確的複製? 謝謝你看看。

+2

如果在文件創建時收到通知,沒有關閉,那麼第三方應用程序可能還沒有寫入任何數據。您不能使用FileSystemWatcher來確保在寫入和關閉文件之後,但在刪除文件之前有機會訪問該文件。 – HABO 2014-09-19 19:07:09

+2

適當的臨時文件是通過不共享+ delete-on-close打開的,因此您可能需要更低級別的代碼來攔截內容,因爲正常的訪問檢查將阻止常規用戶級代碼訪問文件。 – 2014-09-19 19:23:56

+0

文件系統過濾器驅動程序是你的朋友。 – 2014-09-19 20:11:27

回答

2

選項1: 除了查看FileSystemWatcher之外,您應該看看鉤住代碼以刪除事件。 你可以看看這個堆棧溢出此評論:一旦 爲您的FileSystemWatcher的意識到一個文件被創建,文件的變更許可,使其不能被刪除:https://stackoverflow.com/a/4395147/442470

選項2。

+0

謝謝大家。 @Yogee - 謝謝...我保持簡單,只是改變了權限,以免文件被刪除。 – 2014-09-19 21:42:34

相關問題