我需要在文件创建并更改两次后复制它。
我不知道怎么做,除了使用3个FileSystemWachers。第一个关于创造,两个关于改变。
有没有更简单的方法?
答案 0 :(得分:0)
FileSystemWatcher
有several events可用于侦听文件系统上不同类型的事件。还有一个NotifyFilter
属性,您可以使用它来指定应监视的事件类型。
所以你不需要使用三个不同的观察者;一个就足够了。您只需要某种形式的计数器来跟踪对文件进行了多少更改。这是一个简单的例子:
Dictionary<string, int> changeCounter = new Dictionary<string, int>();
...
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\Path\To\Some\Folder";
watcher.NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.LastWrite;
watcher.Created += OnCreated;
watcher.Changed += OnChanged;
...
private void OnCreated(object source, FileSystemEventArgs e)
{
changeCounter.Add(e.FullPath, 0);
}
private void OnChanged(object source, FileSystemEventArgs e)
{
if (changeCounter.ContainsKey(e.FullPath))
{
changeCounter[e.FullPath]++;
if (changeCounter[e.FullPath] == 2)
{
CopyFile(e.FullPath);
}
}
}
这只会在观察者检测到文件创建事件和单个文件的两个文件更改事件后调用CopyFile
。您可能还想修改句柄删除,以防您担心一次创建,编辑,删除,重新创建和编辑文件 - 这将触发CopyFile
,即使从技术上讲,该文件仅被编辑一旦它被创建了。