我正在构建一个C#应用程序,它将监视指定目录的更改和添加,并将信息存储在数据库中。
我想避免检查每个文件的修改,但我不确定是否可以完全信任文件访问时间。
获取目录中最近修改的文件的最佳方法是什么?
只有当用户要求时,它才会检查修改,它不会是一个持续运行的服务。
我想避免检查每个文件的修改,但我不确定是否可以完全信任文件访问时间。
获取目录中最近修改的文件的最佳方法是什么?
只有当用户要求时,它才会检查修改,它不会是一个持续运行的服务。
// 声明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类。然而,如果你要让它在用户请求时工作,那么似乎你需要最初存储目录信息,然后每次用户请求时进行比较。我可能会选择使用FileSystemWatcher并将结果存储下来。
如果你只需要在用户请求时检查而不是一直检查,就不要使用FileSystemWatcher。特别是如果它是共享资源——你最不想看到的是50个客户端机器监视同一个共享目录。
这可能只是一个打字错误,但你不应该查看文件访问时间,你要查看文件修改时间以获取更改。即使这样也不可靠。
我会在文件日期和字节大小或其他文件系统属性上实现某种校验和函数。这样我就不必查找完整文件中的更改——只需查找其属性,我可以按请求执行,而不是尝试保持与远程资源的连接来监视它。
更重的解决方案是反过来做,安装一个服务在托管共享驱动器的机器上,可以监视文件并记录更改。然后你可以查询服务而不是触摸文件——但这可能有点过头了。