2017-03-16 46 views
1

我正在使用C#中的FileSystemWatcher构造。作为课程的标准,我让我的观察者仅仅关注感兴趣的目录。我遇到的问题是,无论用户事件(复制,创建,重命名),我正在拾取的唯一事件是Changed事件。C#:FileSystemWatcher仅派发ChangedEvent

例如。

  1. 观看文件 “C:\桌面\ MattsRequest”

  2. 创建文件 “C:\桌面\ MattsRequest \ Dummy.txt”

  3. 观察,只有给onChanged处理与“改变”一个FileSystemEventArg和路径ARG引发的是“C:\桌面\ 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,但它并不告诉我创建了哪个文件。

enter image description here

任何帮助是极大的赞赏。

+2

最有可能你看顶级目录。例如,您观看“Desktop \ MattsRequest”,但您在子目录“Desktop \ MattsRequest \ MattsRequest \ Dummy.txt”中创建文件。 – Evk

+0

如果你想跟踪子目录中的变化 - 设置'watcher.IncludeSubdirectories = true;' – Evk

+0

@Evk Hello Evk。你是完全正确的问题是什么。你介意让你的评论成为回应,所以我可以给它一个绿色支票? –

回答

2

当您观看目录并在该目录的子目录内创建文件时,可能会发生这种情况。这是因为在目录中创建文件会更改该目录的时间戳,这就是您看到的事件(更改目录)。

要修复 - 要么监视子目录本身,要么设置watcher.IncludeSubdirectories = true;以包含子目录。

0

Evk的回答是正确的。我只是在看祖父母文件夹,并且该文件夹发射了一个缺少信息的事件。一旦我将监视器添加到父文件夹中,创建和其他事件就会正确启动。

+1

标记他的答案是正确的? –