如何检查文件自上次读取后是否已更改? (C#)

时间:2010-07-17 21:18:41

标签: c# winapi filesystems

我有一个文本文件,同一个应用程序的多个实例用于同步和交换数据。简而言之,它是一个包含数据文件列表的纯文本文件。这些数据文件定期来来去去。

有没有一种可靠的方法可以知道某个应用程序自上次读取后写入该文件?通常你会使用修改日期。但是,文件的访问频繁,以至于它可能会不断出现在内存缓存中。因此,写入文件的机会不会改变修改日期。

还有其他方法可以知道该文件已被更改。

我知道文件系统通知,但不想在这里使用它们。

该软件在C#中,但显然我也可以通过InteropServices使用任何WinAPI功能。软件在Windows Server 2008 R2上运行。文件系统是NTFS。理想情况下,该方法也应该适用于网络共享。

4 个答案:

答案 0 :(得分:2)

一个有趣的但是(AFAI)几乎没有使用ntfs的功能是它的USN Journal,你可以阅读。它维护文件系统所有更改的列表。唯一明确使用它的程序是Everything。但可能是FileSystemWatcher在内部使用它。手动读取此日志的一大优点是,您可以找出程序未运行时发生的更改。

答案 1 :(得分:1)

可能更好地使用sql数据库。否则,您必须为此文件组织事务机制。

答案 2 :(得分:1)

如何使用文件内容的哈希值(MD5或SHA1等)来确定文件是否已被修改?

答案 3 :(得分:0)

每次访问该文件时,请保存其哈希值(SHA2),然后再次创建哈希值并将其与之前保存的值进行比较。

简单而优雅。