C#中带有FileSystemWatcher的Windows服务

时间:2012-08-17 03:21:46

标签: c# windows-services filesystemwatcher

我必须创建一个监视文件大小变化的程序。我已经制作了一个简单的Windows服务和filesystemwatcher,所以我现在熟悉这个概念。我还制作了一个代码,用于检查filesize(在表单按钮中创建)但尚未在我的filesystemwatcher中实现。如何创建具有监视文件大小的filewatcher的Windows服务?我是否必须在Windows服务中放置filesystemwatcher并通过OnStart方法调用观察者?

3 个答案:

答案 0 :(得分:15)

如果您正在制作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将为单个文件触发多个事件,因此当您调试监视模式以解决它时。

答案 1 :(得分:3)

您可以通过设置

在OnStart方法中启用filesystemwatcher对象
EnableRaisingEvents = true;

然后处理事件。应该这样做。

答案 2 :(得分:1)

你可以创建一个委托来处理像

这样的变化
myWatcher.Changed += new FileSystemHandler(FSWatcherTest_Changed);

private void FSWatcherTest_Changed(object sender, 
                System.IO.FileSystemEventArgs e)
{
    //code here for newly changed file or directory
}

等等

我建议你阅读这篇文章http://www.codeproject.com/Articles/18521/How-to-implement-a-simple-filewatcher-Windows-serv

在Windows服务中也有此委托on_start