C#:FileSystemWatcher 仅调度 ChangedEvent

C#: FileSystemWatcher only dispatches ChangedEvent

我正在使用 C# 中的 FileSystemWatcher 构造。作为课程的标准,我让我的观察者只看感兴趣的目录。我遇到的问题是,无论用户事件(复制、创建、重命名)如何,我选择的唯一事件是 Changed 事件。

例如

  1. 观看文件"C:...\Desktop\MattsRequest"

  2. 创建文件"C:...\Desktop\MattsRequest\Dummy.txt"

  3. 观察到只有 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; 以包含子目录。