首页 > 解决方案 > 文件观察者可以读取放置在观察路径上的文件夹的内容吗?

问题描述

我有一个 Windows 服务可以监视我的 PC 上的路径。我的挑战是我遇到了服务问题,不得不停止它并修复它。现在,监视路径上的子目录中有新文件,因为服务没有运行,所以没有处理。我希望能够从路径中剪切文件夹并粘贴它,然后我的服务应该检测到该文件夹​​,这部分工作正常,但它不会继续并读取文件夹内的文件。

以下是文件观察器的设置方式

fileSystemWatcher1.Path = filePath;
fileSystemWatcher1.EnableRaisingEvents = true;
fileSystemWatcher1.IncludeSubdirectories = true;
fileSystemWatcher1.InternalBufferSize = fsWatcherBuffer;
fileSystemWatcher1.Created += new 
FileSystemEventHandler(fileSystemWatcher1_Created);
fileSystemWatcher1.Changed += new 
FileSystemEventHandler(fileSystemWatcher1_Changed);

标签: c#windows-servicesfile-watcher

解决方案


我用我的 Windows 10 操作系统做了一些实验,似乎移动子文件夹只会Created为移动的目录引发一个事件,但复制粘贴子文件夹会引发子文件夹及其所有内容的事件Created深度)。Changed

我的观察结果与文档不符:

操作系统和 FileSystemWatcher 对象将剪切和粘贴操作或移动操作解释为文件夹及其内容的重命名操作。如果您将包含文件的文件夹剪切并粘贴到正在监视的文件夹中,则 FileSystemWatcher 对象仅将文件夹报告为新文件夹,而不报告其内容,因为它们实际上只是被重命名。

要通知文件夹的内容已被移动或复制到监视文件夹中,请提供 OnChanged 和 OnRenamed 事件处理程序方法

也从这里

如果在您正在监视的目录的子树中创建了一个目录,并且 IncludeSubdirectories 为 true,则该目录将自动被监视。


推荐阅读