代码之家  ›  专栏  ›  技术社区  ›  Andrew Burgess

目录修改监控

  •  6
  • Andrew Burgess  · 技术社区  · 16 年前

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

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

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

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

    4 回复  |  直到 10 年前
        1
  •  1
  •   Martin Brown    12 年前

    隐马尔可夫模型。。。有趣的问题。最初我会指给你看 FileSystemWatcher 班级。但是,如果您打算让它在用户请求时工作,那么您可能需要首先存储目录外的信息,然后在每次用户请求时进行比较。我可能会使用一个文件系统监视程序,然后将结果存储起来。

        2
  •  6
  •   MikeJ    16 年前

    使用FileSystemWatcher对象。下面是一些代码来完成您正在寻找的工作。

        // Declares the FileSystemWatcher object
        FileSystemWatcher watcher = new FileSystemWatcher(); 
    
        // We have to specify the path which has to monitor
    
         watcher.Path = @"\\somefilepath";     
    
        // This property specifies which are the events to be monitored
         watcher.NotifyFilter = NotifyFilters.LastAccess |
           NotifyFilters.LastWrite | NotifyFilters.FileName | notifyFilters.DirectoryName; 
        watcher.Filter = "*.*"; // Only watch text files.
    
        // Add event handlers for specific change events...
    
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
        watcher.Renamed += new RenamedEventHandler(OnRenamed);
        // Begin watching.
        watcher.EnableRaisingEvents = true;
    
    
        // Define the event handlers.
        private static void OnChanged(object source, FileSystemEventArgs e)
        {
        // Specify what is done when a file is changed, created, or deleted.
        }
    
        private static void OnRenamed(object source, RenamedEventArgs e)
        {
        // Specify what is done when a file is renamed.
        }
    
        3
  •  2
  •   Eric Schoonover thSoft    16 年前

    我想你想要的是 FileSystemWatcher 班级。

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

        4
  •  1
  •   Jon    16 年前

    如果您只需要在用户询问时检查,而不需要一直检查,那么不要使用文件系统观察程序。尤其是如果它是一个共享资源——您最不希望看到的是50台客户机监视同一个共享目录。

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

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

    另一个更为重要的解决方案是反过来,在承载共享驱动器的机器上安装一个服务,该服务可以监视文件并记录更改。然后,您可以查询服务,而不必触摸文件——但这可能太过分了。