2010-02-23 65 views
0

我需要編寫一些代碼,以便在文件更改時從目錄複製文件。FileSystemWatcher

我知道C/C++(little bit:]),但我從來沒有使用過.net。我覺得好嗎? 首先我用FSW創建新線程,然後當發生更改時創建下一個將複製文件的線程?

回答

1

您描述的模式是讓一個線程使用FileSystemWatcher來觀察文件,並將一個事件(或文件)插入到隊列中,而另一個線程讀取隊列並操作事件。

0

由於文件系統監視是操作系統功能,因此您處於正確的軌道上。您可以在.NET中或直接在本地C++中使用它。 .NET提供了一個更簡單的編程模型。

請注意,根據您的要求,您可以使用Robocopy(至少包含在Vista中)可以監控目錄並自動複製文件。

2

如果您對C/C++感到滿意,那麼您應該使用ReadDirectoryChangesW()。 FileSystemWatcher是這個API函數的一個簡單包裝器。但不可否認,更容易上手。示例SDK代碼可用here.

FSW/RDC的常見問題是,當您收到通知時無法訪問該文件,因爲正在寫入該文件的應用程序對其具有鎖定。您需要一個線程安全的隊列來存儲通知,由定期嘗試執行所需操作的另一個線程清空。在處理通知時,這也是一種健康的方法,您需要花費盡可能少的時間來避免創建大型通知緩衝區。他們是一個昂貴的系統資源。