9

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

4

3 回答 3

17

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

于 2012-08-17T03:39:52.643 回答
3

您可以通过设置在 OnStart 方法中简单地启用您的文件系统观察器对象

EnableRaisingEvents = true;

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

于 2012-08-17T03:40:07.277 回答
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

on_start在 Windows 服务中也有这个委托

于 2012-08-17T03:42:00.190 回答