使用.NET定期查找目录中的已更改文件

时间:2011-12-23 12:57:38

标签: c# .net .net-4.0

我正在尝试使用C#和.NET找到在目录中查找新文件和修改过的文件的最可靠方法。我不是在寻找实时解决方案,我想在给定时间检查更改。它可能是每5分钟或每小时等。

我们在FileInfo对象上有CreationTime和LastWriteTime,这似乎足以获取新的和修改过的文件。但是,如果重命名文件,则不会更改任何可用日期,如果我们只查看CreationTime和LastWriteTime,则会丢失文件。

目前我正在维护目录中文件的“快照”,包括上次检查更改的时间。这使我能够将目录中的所有文件与快照中的文件进行比较,如果快照缺少文件,则为新文件或重命名文件。

这是唯一的方法吗?我错过了什么。我不打算使用FileSystemWatcher,因为它似乎非常“错误”并且需要一直运行。

非常欢迎任何建议。

圣诞快乐!

5 个答案:

答案 0 :(得分:6)

使用FileSystemWatcher课程,这是好方法。也许你可以用

更具体
  

因为它看起来很漂亮“错误”

编辑:FileSystemWatcher支持renaming events

答案 1 :(得分:1)

Microsoft Sync Framework包含synchronising files的组件。

该框架涵盖了所有数据类型和数据存储,文件系统组件应该比FileSystemWatcher更可靠。正如它在MSDN中所说:

  

它可用于同步NTFS,FAT或SMB文件系统中的文件和文件夹。要同步的目录可以是本地或远程;它们不必是同一个文件系统。应用程序可以使用静态过滤器通过显式列出文件或使用通配符(例如* .txt)来排除或包含文件。或者应用程序可以设置排除整个子文件夹的过滤器。应用程序还可以注册以接收文件同步进度的通知

我知道你真的只想知道文件何时发生了变化,但鉴于你已经解除了FileSystemWatcher路线,它可能是唯一可靠的路线(除了你自己维护快照的时候) )。

答案 2 :(得分:1)

您的问题看起来非常像没有主键的数据库。

如果您为该文件夹中的每个文件设置一个GUID并检查该GUID而不是文件名,那么您的应用程序将更加可靠。

这就是理论,在实践中,我们正在谈论元数据。根据您的系统以及该文件夹中包含的文件,您可以使用Alternate Data Streams

Here是一个关于它的问题。

归结为拥有未存储在文件中的文件的信息,它只与它相关联 然后,您可以在DOS框中查找它:

notepade.exe myfile.txt:MYGUID

它要求系统使用NTFS。

HTH。

答案 3 :(得分:0)

一种非常原始的方法是使用“dir”命令并比较输出......

以下是有关params的一些信息: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/dir.mspx?mfr=true

除了你的日期快照,你可以比较目录的输出......它非常快,耗资量低......

答案 4 :(得分:0)

.net中的文件系统观察者类提供了两种方法: -

  1. 调用onChanged
  2. OnRenamed
  3. 你可以将EnableRaisingEvents设置为true,那就是!!!! Dot Net的每一件事都很简单!