如何监视Windows目录以进行更改?

Lia*_*iam 32 windows directory monitoring

当在Windows系统上的目录中进行更改时,我需要立即通知程序更改.

发生变化时是否有某种方式执行程序?

我不是C/C++/.NET程序员,所以如果我可以设置一些东西,以便更改可以触发批处理文件,那么这将是理想的.

Ref*_*din 25

使用如下所示的FileSystemWatcher创建WatcherCreated Event().我使用它来创建一个Windows服务,它监视一个Network文件夹,然后在新文件到达时通过电子邮件发送指定的组.

    // Declare a new FILESYSTEMWATCHER
    protected FileSystemWatcher watcher;
    string pathToFolder = @"YourDesired Path Here";

    // Initialize the New FILESYSTEMWATCHER
    watcher = new FileSystemWatcher {Path = pathToFolder, IncludeSubdirectories = true, Filter = "*.*"};
    watcher.EnableRaisingEvents = true;
    watcher.Created += new FileSystemEventHandler(WatcherCreated);

    void WatcherCreated(object source , FileSystemEventArgs e)
    {
      //Code goes here for when a new file is detected
    }
Run Code Online (Sandbox Code Playgroud)

  • 我知道你发布的帖子表明你不是.NET程序员,而是使用Free Visual Studio Express的副本,我发布的代码是%80.Stack OverFlow可能会让你获得另一个%20.根据您对检测到的文件的处理方式,这是一个非常简单的实现和部署解决方案.如果您有兴趣,我可以详细说明我的帖子给谁创建窗口服务. (2认同)

Art*_*dez 9

FileSystemWatcher是正确的答案,除了它曾经是FileSystemWatcher一次仅用于"少数"更改.那是因为操作系统缓冲区.实际上,每当复制许多小文件时,保存更改的文件的文件名的缓冲区就会溢出.这个缓冲区实际上并不是跟踪最近更改的正确方法,因为当缓冲区已满时,操作系统必须停止写入以防止超出.

相反,Microsoft提供其他工具(编辑:如更改日记)以真正捕获所有更改.这基本上是备份系统使用的设施,并且在记录的事件上很复杂.而且记录也很少.

一个简单的测试是生成大量的小文件,看看它们是否都由FileSystemWatcher报告.如果您遇到问题,我建议回避整个问题,并按时间间隔扫描文件系统中的更改.


Rob*_*ker 6

如果你想要非程序化的东西尝试GiPo @ FileUtilities ......但在这种情况下问题不属于这里!