我們有第三方應用程序將文件寫入目錄並刪除它。 我們希望在刪除文件之前複製該文件。使用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。
我想仔細檢查一下爲什麼文件是空的。是否因爲第三方應用程序很快刪除了該文件,因此它沒有機會進行正確的複製? 謝謝你看看。
如果在文件創建時收到通知,沒有關閉,那麼第三方應用程序可能還沒有寫入任何數據。您不能使用FileSystemWatcher來確保在寫入和關閉文件之後,但在刪除文件之前有機會訪問該文件。 – HABO 2014-09-19 19:07:09
適當的臨時文件是通過不共享+ delete-on-close打開的,因此您可能需要更低級別的代碼來攔截內容,因爲正常的訪問檢查將阻止常規用戶級代碼訪問文件。 – 2014-09-19 19:23:56
文件系統過濾器驅動程序是你的朋友。 – 2014-09-19 20:11:27