C#:FileSystemWatcher 仅调度 ChangedEvent
C#: FileSystemWatcher only dispatches ChangedEvent
我正在使用 C# 中的 FileSystemWatcher 构造。作为课程的标准,我让我的观察者只看感兴趣的目录。我遇到的问题是,无论用户事件(复制、创建、重命名)如何,我选择的唯一事件是 Changed 事件。
例如
观看文件"C:...\Desktop\MattsRequest"
创建文件"C:...\Desktop\MattsRequest\Dummy.txt"
观察到只有 OnChanged 处理程序被 "Changed" 的 FileSystemEventArg 触发并且路径 arg 是 "C:...\Desktop\MattsRequest" 并且没有提及创建了什么文件
我的观察者代码看起来像这样。
watcher = new FileSystemWatcher();
//watcher.IncludeSubdirectories = true;
watcher.InternalBufferSize = 32768 * 2;
//Can't use a synchro because I can't find an example of something that
//implements ISynchroniz-whatever
//watcher.SynchronizingObject =
watcher.Path = filePath;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName
| NotifyFilters.CreationTime;
watcher.Changed += OnChanged; //Gets triggered
watcher.Created += OnCreated; //Never triggered
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed; //Never triggered
watcher.Error += WatcherOnError; //Never triggered
// Begin watching.
watcher.EnableRaisingEvents = true;
下面是我在监视目录中创建新文件时的图像,以及它触发的事件。它当然是 Changed 类型,但它没有告诉我创建了哪个文件。
非常感谢任何帮助。
Evk 的回答是正确的。我只观看了 grandparent 文件夹,该文件夹触发了一个缺少信息的事件。一旦我将观察者添加到 parent 文件夹,Created 和其他事件就会被正确触发。
当您查看目录并在该目录的子目录中创建文件时,可能会发生这种情况。这是因为在目录中创建文件会更改该目录的时间戳,这就是您看到的事件(目录更改)。
修复 - 观察子目录本身,或设置 watcher.IncludeSubdirectories = true;
以包含子目录。
我正在使用 C# 中的 FileSystemWatcher 构造。作为课程的标准,我让我的观察者只看感兴趣的目录。我遇到的问题是,无论用户事件(复制、创建、重命名)如何,我选择的唯一事件是 Changed 事件。
例如
观看文件"C:...\Desktop\MattsRequest"
创建文件"C:...\Desktop\MattsRequest\Dummy.txt"
观察到只有 OnChanged 处理程序被 "Changed" 的 FileSystemEventArg 触发并且路径 arg 是 "C:...\Desktop\MattsRequest" 并且没有提及创建了什么文件
我的观察者代码看起来像这样。
watcher = new FileSystemWatcher();
//watcher.IncludeSubdirectories = true;
watcher.InternalBufferSize = 32768 * 2;
//Can't use a synchro because I can't find an example of something that
//implements ISynchroniz-whatever
//watcher.SynchronizingObject =
watcher.Path = filePath;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName
| NotifyFilters.CreationTime;
watcher.Changed += OnChanged; //Gets triggered
watcher.Created += OnCreated; //Never triggered
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed; //Never triggered
watcher.Error += WatcherOnError; //Never triggered
// Begin watching.
watcher.EnableRaisingEvents = true;
下面是我在监视目录中创建新文件时的图像,以及它触发的事件。它当然是 Changed 类型,但它没有告诉我创建了哪个文件。
非常感谢任何帮助。
Evk 的回答是正确的。我只观看了 grandparent 文件夹,该文件夹触发了一个缺少信息的事件。一旦我将观察者添加到 parent 文件夹,Created 和其他事件就会被正确触发。
当您查看目录并在该目录的子目录中创建文件时,可能会发生这种情况。这是因为在目录中创建文件会更改该目录的时间戳,这就是您看到的事件(目录更改)。
修复 - 观察子目录本身,或设置 watcher.IncludeSubdirectories = true;
以包含子目录。