目录修改监控
我正在构建一个C#应用程序,它将监视指定的目录以进行更改和添加,并将信息存储在数据库中。
我想避免检查每个单独的文件进行修改,但我不确定我是否完全可以信任文件访问时间。
在目录中获取最近修改过的文件的最佳方法是什么?
它只会在用户询问时检查修改,它不会是一个持续运行的服务。
嗯…有趣的问题。 最初我会指向FileSystemWatcher类。 但是,如果您要按照用户请求进行操作,那么您最初可能需要存储目录信息,然后在每次用户请求时进行比较。 我可能会使用FileSystemWatcher,无论如何只是存储你的结果。
使用FileSystemWatcher对象。 以下是一些可以满足您需求的代码。
//声明FileSystemWatcher对象 FileSystemWatcher watcher = new FileSystemWatcher(); //我们必须指定必须监控的路径 watcher.Path = @“\\ somefilepath”; //此属性指定要监视的事件 watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | 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; //定义事件处理程序。 private static void OnChanged(object source,FileSystemEventArgs e) { //指定更改,创建或删除文件时执行的操作。 } private static void OnRenamed(object source,RenamedEventArgs e) { //指定重命名文件时执行的操作。 }
我想你想要的是由FileSystemWatcher类提供的。
本教程描述了如何使用它来监视目录中的简单Windows服务中的更改; 如何在C#中实现一个简单的filewatcher Windows服务
如果您只需要检查用户何时询问而不是一直询问,请不要使用FileSystemWatcher。 特别是如果它是一个共享资源 – 你想要的最后一件事就是50台客户机看同一个共享目录。
这可能只是一个错字,但您不应该查看文件访问时间,您要查看文件修改时间以获取更改。 即便这样也不可靠。
我要做的是在文件日期和字节大小或其他文件系统属性上实现某种校验和function。 这样我就不会在整个文件中查找更改 – 只有它的属性,我可以根据请求执行此操作,而不是尝试保持与远程资源的连接以监视它。
更重要的解决方案是以相反的方式执行此操作,并在托管共享驱动器的计算机上安装服务,该服务器可以监视文件并记录更改。 然后你可以查询服务而不是触摸文件 – 但它可能有点过分。