我正在尝试使用C#和.NET找到在目录中查找新文件和修改过的文件的最可靠方法。我不是在寻找实时解决方案,我想在给定时间检查更改。它可能是每5分钟或每小时等。
我们在FileInfo对象上有CreationTime和LastWriteTime,这似乎足以获取新的和修改过的文件。但是,如果重命名文件,则不会更改任何可用日期,如果我们只查看CreationTime和LastWriteTime,则会丢失文件。
目前我正在维护目录中文件的“快照”,包括上次检查更改的时间。这使我能够将目录中的所有文件与快照中的文件进行比较,如果快照缺少文件,则为新文件或重命名文件。
这是唯一的方法吗?我错过了什么。我不打算使用FileSystemWatcher,因为它似乎非常“错误”并且需要一直运行。
非常欢迎任何建议。
圣诞快乐!
答案 0 :(得分:6)
答案 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中的文件系统观察者类提供了两种方法: -
你可以将EnableRaisingEvents设置为true,那就是!!!! Dot Net的每一件事都很简单!