【发布时间】:2019-08-26 13:14:03
【问题描述】:
我正在构建一个简单的 Windows 服务(基本上结合了 this tutorial 和 this class)。
现在我有一个“FROM”目录和两个“TO”(TO1、TO2)目录。当我将文件放入 FROM 时,它应该同时复制到 TO1 和 TO2。我安装了该服务,并在我看到它正在运行的服务控制管理器中启动它。在第一次运行时,它将文件复制到 TO1 和 TO2,之后服务仍在运行。 然后,当我将另一个文件放入 FROM(使用不同的名称)时,什么也没有发生。并刷新服务我发现服务停止了。
为什么服务会停止?它似乎就在我放置第二个文件的那一刻停止了。
这里我注册了文件系统观察者:
// File System Watcher
var fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Created += FileSystemWatcher_MoveOnCreate;
fileSystemWatcher.Path = this.fromPath;
fileSystemWatcher.EnableRaisingEvents = true;
这里是事件处理程序:
private void FileSystemWatcher_MoveOnCreate(object sender, FileSystemEventArgs e)
{
string FROM = Path.Combine(fromPath, e.Name);
string TO1 = Path.Combine(toPathOne, e.Name);
string TO2 = Path.Combine(toPathTwo, e.Name);
File.Copy(FROM, TO1);
File.Copy(FROM, TO2)
}
【问题讨论】:
-
sourceFile ?你的意思是 FROM 吗?
-
请注意,文件系统事件的缓冲区有限。如果您的复制持续时间过长,您最终可能会丢失事件。我见过并使用的一种模式是将所有事件写入队列(快速),因此系统的缓冲区不会踢事件。
标签: c# .net windows-services filesystemwatcher