【发布时间】:2022-04-25 12:48:58
【问题描述】:
这是我的代码...在 Foo 目录中创建新文件时,不会触发任何 FileSystemWatcher 事件。我的代码有什么问题?
我正在通过调用 fileMonitorService.StartMonitoringForNewFiles(new RobotParameters()) 从 NUnit 测试中对此进行测试。
// attribute for autofac IoC
[AutoRegister]
public class FileMonitorService
{
private FileSystemWatcher _fileWatcher = new FileSystemWatcher();
public void StartMonitoringForNewFiles(RobotParameters parameters)
{
_fileWatcher.Path = @"c:\testfiles\foo";
_fileWatcher.NotifyFilter = NotifyFilters.Attributes |
NotifyFilters.CreationTime |
NotifyFilters.FileName |
NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.Size |
NotifyFilters.Security;
_fileWatcher.Filter = "*.xlsx";
_fileWatcher.Created += new FileSystemEventHandler((sender, e) => OnFileCreated(sender, e, parameters));
_fileWatcher.Renamed += new RenamedEventHandler((sender, e) => OnFileRenamed(sender, e, parameters));
_fileWatcher.Error += new ErrorEventHandler(OnError);
_fileWatcher.EnableRaisingEvents = true;
}
public void StopMonitoringForFiles()
{
_fileWatcher.EnableRaisingEvents = false;
}
private void OnFileRenamed(object sender, RenamedEventArgs e, RobotParameters parameters)
{
parameters.FileToProcess = e.FullPath;
parameters.FileCreated = true;
}
private void OnFileCreated(object sender, FileSystemEventArgs e, RobotParameters parameters)
{
parameters.FileToProcess = e.FullPath;
parameters.FileCreated = true;
}
private void OnError(object sender, ErrorEventArgs e)
{
var foo = e.GetException();
}
}
【问题讨论】:
-
FSW没有bug,考虑重点测试代码。顺便说一句,它看不到 OnError 并不漂亮。
-
也许是一个显而易见的问题,但您将过滤器设置为 .xlsx 文件。您创建的测试文件是否使用该扩展名?
-
安迪是的,它是一个 .xlsx 文件...我将它复制到 Foo 目录中,并且没有引发任何事件。由于某种原因,每个事件中的断点都不会被命中。
-
无法重现。事件如预期上升。按照此处发布的方式实施。错误在其他地方(类没有正确实例化?)。
-
您意识到如果事件被引发,您将不断地覆盖
parameters的属性,因为单个共享实例被传递到每个事件中。如果在您处理它之前,两个不同文件的事件快速连续触发两次(我假设这里没有显示其他一些代码)您打算做什么?
标签: c# filesystemwatcher