2012-08-17 51 views
8

我必須創建一個程序來監視文件大小的變化。我已經做了一個簡單的Windows服務和文件系統監視器,所以我現在對這個概念很熟悉。我還製作了一個代碼,用於檢查文件大小(將其作爲表單按鈕),但尚未在我的文件系統監視器中實現。如何創建一個具有監視文件大小的filewatcher的Windows服務?我必須將文件系統監視器放在Windows服務中,並通過OnStart方法調用監視器嗎?Windows服務w/FileSystemWatcher在C#

回答

14

如果您正在製作Window的服務,那麼您需要以編程方式進行操作。我通常會將表單從我的服務中刪除,併爲他們建立一個單獨的界面進行交流。現在FileSystemWatcher沒有一個事件只能看大小,所以您需要創建一個與FileSystemWatcher.Changed綁定的方法來檢查對現有文件的修改。在OnStart方法中聲明並初始化控件,並將事件連接在一起。在OnStop方法中執行任何清理代碼。它應該是這個樣子:

protected override void OnStart(string[] args) 
{ 
FileSystemWatcher Watcher = new FileSystemWatcher("PATH HERE"); 
Watcher.EnableRaisingEvents = true; 
Watcher.Changed += new FileSystemEventHandler(Watcher_Changed); 
} 

// This event is raised when a file is changed 
private void Watcher_Changed(object sender, FileSystemEventArgs e) 
{ 
// your code here 
} 

還要注意,在FileSystemWatcher的將火過多個事件爲單個文件,所以當你正在調試手錶的模式來解決它。

+0

所以我不應該在服務窗口中的工具箱中添加任何項目。謝謝!我會盡快嘗試。這真的有幫助 – 2012-08-17 03:50:13

+0

我會遠離它。在運行服務時,Windows自然會禁用表單集成,並且您必須在安裝後配置該服務以允許它。如果它只是你的眼睛看到的東西,那麼它可能不是什麼大不了的事,但避免這種發展風格(出於安全原因)是一個好習慣。 – 2012-08-17 03:56:50

+1

更新:在Windows Vista&Win 7中,允許桌面交互的選項已完全刪除。在發佈時沒有意識到這一點。 – 2012-08-20 16:33:50

3

你可以簡單地通過設置

EnableRaisingEvents = true; 

然後處理該事件能夠在OnStart方法你FileSystemWatcher的對象。這應該做到這一點。

+0

默認值會是真的 – Peru 2012-08-17 04:23:32

+1

也許。 [MSDN](http://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher.enableraisingevents.aspx) - 「如果組件已啓用,則爲true;否則爲false。默認爲false。如果您正在使用Visual Studio 2005中的設計器上的組件,默認值爲true。「 – 2012-08-17 14:29:17