我正在构建一个C#应用程序,它将监视指定的目录以进行更改和添加,并将信息存储在数据库中。
我想避免检查每个文件的修改,但我不确定我是否完全可以信任文件访问时间。
用于获取目录中最近修改过的文件的最佳方法是什么?
只有在用户要求时才会检查修改,它不会是一个持续运行的服务。
答案 0 :(得分:6)
使用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. }
答案 1 :(得分:2)
我认为你想要的是由FileSystemWatcher类提供的。
本教程介绍如何使用它来监视目录中的简单Windows服务中的更改; How to implement a simple filewatcher Windows service in C#
答案 2 :(得分:1)
答案 3 :(得分:1)
如果您只需要检查用户何时询问而不是一直询问,请不要使用FileSystemWatcher。特别是如果它是一个共享资源 - 你想要的最后一件事就是50台客户机看同一个共享目录。
这可能只是一个错字,但您不应该查看文件访问时间,您要查看文件修改时间以获取更改。即便这样也不可靠。
我要做的是在文件日期和字节大小或其他文件系统属性上实现某种校验和功能。这样我就不会在整个文件中查找更改 - 只有它的属性,我可以根据请求执行此操作,而不是尝试保持与远程资源的连接以进行监视。
更重要的解决方案是以相反的方式执行此操作,并在托管共享驱动器的计算机上安装服务,该计算机可以监视文件并记录更改。然后你可以查询服务而不是触摸文件 - 但它可能有点过分。