Windows:如何确定自给定日期以来文件是否已被修改

Jus*_*tin 5 c# last-modified

我有一个实用程序,它通过一个目录中的一组文件进程 - 进程相对较慢(并且有很多文件)所以我试图通过只有进程的文件来优化进程修改"晚于上一个处理日期.

通常这很好用但是我发现复制文件不会改变上次修改日期,因此有各种方案涉及复制文件,其中进程跳过某些已更改的文件,例如:

  1. 用户在9:00处理目录.
  2. 然后从该目录复制文件并进行修改,使其最后修改日期为9:30
  3. 然后在10:00再次处理该目录
  4. 然后在10:30将修改后的文件复制回目录
  5. 最后,目录在11:00再次处理

由于给定文件的修改日期是9:30,并且目录最后在10:00处理,因此不应该跳过该文件.

不幸的是,在某些情况下(例如在具有源控制等的协作环境中),上述情况往往发生得太频繁.显然我的逻辑是有缺陷的 - 我真正需要的是"最后修改或复制"的日期.这样的事情存在吗?

如果失败了,是否有另一种方法可以在给定文件发生变化的情况下以合理的可靠性快速确定?

Mat*_*ela 9

您可能希望查看使用FileSystemWatcher类.此类允许您监视目录以进行更改,并在修改某些内容时触发事件.然后,您的代码可以处理事件并处理文件.

来自MSDN:

// Create a new FileSystemWatcher and set its properties.
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = args[1];
/* Watch for changes in LastAccess and LastWrite times, and
   the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
   | NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = "*.txt";

// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
Run Code Online (Sandbox Code Playgroud)


小智 4

您是否考虑过对文件运行 MD5 校验和并将其存储起来以供以后比较?如果您总是处理某个目录,这可能是可行的。