【问题标题】:Directory Modification Monitoring目录修改监控
【发布时间】:2010-09-11 20:30:15
【问题描述】:

我正在构建一个 C# 应用程序,它将监视指定目录的更改和添加,并将信息存储在数据库中。

我想避免检查每个单独的文件是否有修改,但我不确定我是否可以完全相信文件访问时间。

在目录中获取最近修改的文件的最佳方法是什么?

它只会在用户要求时检查修改,它不会是一个持续运行的服务。

【问题讨论】:

  • 您是否有始终运行的服务,或者您是否希望程序在每次运行时检索最近修改的文件,而无需持续监控文件系统?请澄清问题。

标签: c# file directory filesystems


【解决方案1】:

使用 FileSystemWatcher 对象。这里有一些代码可以做你正在寻找的东西。

// 声明 FileSystemWatcher 对象 FileSystemWatcher watcher = new FileSystemWatcher(); // 我们必须指定要监控的路径 watcher.Path = @"\\somefilepath"; // 此属性指定要监视的事件 watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.文件名 | notifyFilters.DirectoryName; watcher.Filter = "*.*"; // 只看文本文件。 // 为特定的更改事件添加事件处理程序... watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed); // 开始观看。 watcher.EnableRaisingEvents = true; // 定义事件处理程序。 私有静态无效 OnChanged(对象源,FileSystemEventArgs e) { // 指定更改、创建或删除文件时执行的操作。 } 私有静态无效 OnRenamed(对象源,RenamedEventArgs e) { // 指定重命名文件时要执行的操作。 }

【讨论】:

    【解决方案2】:

    我认为FileSystemWatcher 类提供了您想要的。

    本教程描述了如何使用它来监视一个简单的 Windows 服务中的目录更改; How to implement a simple filewatcher Windows service in C#

    【讨论】:

      【解决方案3】:

      嗯...有趣的问题。最初,我会将您指向FileSystemWatcher 课程。但是,如果您要让它在用户请求时工作,那么您可能需要最初存储目录信息,然后在每次用户请求时进行比较。我可能会使用 FileSystemWatcher 并存储您的结果。

      【讨论】:

        【解决方案4】:

        如果您只需要它来检查用户何时询问而不是一直检查,请不要使用 FileSystemWatcher。特别是如果它是一个共享资源——你最不想要的就是 50 台客户端机器观看同一个共享目录。

        这可能只是一个错字,但您不应该查看文件访问时间,您应该查看文件修改时间以获取更改。即使这样也不可靠。

        我要做的是对文件日期和字节大小或其他文件系统属性实现某种校验和功能。这样我就不会在整个文件中寻找更改 - 只有它的属性,我可以根据要求进行更改,而不是尝试保持与远程资源的连接来监控它。

        更重的解决方案是反过来做,并在托管共享驱动器的机器上安装一项服务,该服务可以监控文件并记录更改。然后你可以查询服务而不是接触文件——但这可能有点矫枉过正。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-08
          • 2010-10-05
          • 1970-01-01
          • 2010-09-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多