读取文件时避免更新上次访问的date/时间

我们正在构build一个基于Windows的应用程序,它recursion地遍历目录结构,查找符合特定条件的文件,然后对它们进行一些处理。 为了决定是否处理一个特定的文件,我们必须打开该文件并阅读其中的一些内容。

这种方法在原理上似乎很好,但是一些testing早期版本的应用程序的客户已经报告说,它正在改变大量文件的最后访问时间(毫不奇怪,因为它实际上是访问文件)。 这对于这些客户来说是一个问题,因为他们根据上次访问的文件时间(例如,他们存档的文件在过去12个月内没有被访问过)具有归档策略。 由于我们的应用程序计划比归档“窗口”更频繁地运行,我们正在有效地防止这些文件被存档。

我们试着在读取之前添加一些代码来保存每个文件的最后访问时间,然后将其写回(可怕,我知道),但是这对另一个基于文件系统事务日志进行增量备份的客户造成了问题。 我们明确地设置上次访问文件的时间是使这些文件包含在每个增量备份中,即使这些文件没有真正改变。

所以这里有一个问题:在Windows环境中是否有任何方法可以读取文件,而不必更新上次访问的时间?

提前致谢!

编辑:尽pipe“ntfs”标签,我们实际上不能依靠文件系统是NTFS。 我们的许多客户通过networking运行我们的应用程序,所以它可能只是关于另一端的任何事情。

该文件表明你可以做到这一点,但我从来没有尝试过自己。

为了即使在访问文件后仍保留文件的最后访问时间,打开文件句柄后立即调用SetFileTime,并将此参数的FILETIME结构成员初始化为0xFFFFFFFF。

从Vista开始,NTFS默认不会更新上次访问时间。 要启用此功能,请参阅http://technet.microsoft.com/en-us/library/cc959914.aspx

开始NTFS交易和回滚是非常糟糕的,表现将是可怕的。

你也可以做

FSUTIL行为设置为disablelastaccess 0

我不知道你的客户的最低要求是什么,但你有没有尝试NTFS交易? 在桌面上,支持它的第一个操作系统是Vista,而在服务器上是Windows server 2008.但是,这可能是值得一看的。

启动NTFS事务,读取您的文件,回滚事务。 简单! :-)。 我其实不知道是否会回滚上次访问日期。 你将不得不为自己测试一下。

这里是一个关于NTFS事务的MSDN杂志文章的链接,其中包括其他链接。 http://msdn.microsoft.com/en-us/magazine/cc163388.aspx

希望能帮助到你。