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

| 我们正在构建一个基于Windows的应用程序,该应用程序以递归方式遍历目录结构,查找满足特定条件的文件,然后对它们进行一些处理。为了决定是否处理特定文件,我们必须打开该文件并读取其某些内容。 这种方法原则上看起来不错,但是一些测试早期版本应用程序的客户报告说,它正在更改大量文件的最后访问时间(不足为奇,因为实际上是在访问文件)。对于这些客户而言,这是一个问题,因为他们具有基于文件的最后访问时间的存档策略(例如,他们存档了过去12个月中未访问的文件)。由于我们的应用程序计划比存档“窗口”更频繁地运行,因此我们有效地防止了其中的任何文件被存档。 我们尝试添加一些代码以保存每个文件在读取前的最后访问时间,然后将其写回(我知道这很糟糕),但这给另一个基于文件系统事务日志进行增量备份的客户造成了问题。我们对文件上次访问时间的显式设置导致这些文件包含在每个增量备份中,即使它们实际上并没有更改。 因此,这里的问题是:在Windows环境中,是否有任何方法可以读取文件而无需更新上次访问的时间? 提前致谢! 编辑:尽管有\“ ntfs \”标记,我们实际上不能依赖于文件系统是NTFS。我们的许多客户都在网络上运行我们的应用程序,因此在另一端几乎可以是任何东西。     
已邀请:
文档指示您可以执行此操作,尽管我自己从未尝试过。   为了即使在访问文件后仍保留文件的现有最后访问时间,请在使用此参数的FILETIME结构成员初始化为0xFFFFFFFF的情况下打开文件句柄后立即调用SetFileTime。     
从Vista开始,NTFS默认不会更新上次访问时间。要启用此功能,请参见http://technet.microsoft.com/en-us/library/cc959914.aspx 启动NTFS事务并回滚是非常糟糕的,并且性能将很糟糕。 你也可以 FSUTIL行为设置disablelastaccess 0     
我不知道您的客户的最低要求是什么,但是您是否尝试过NTFS Transactions?在台式机上,第一个支持它的操作系统是Vista,在服务器上是Windows Server2008。但是,值得一看。 启动NTFS事务,读取文件,回滚事务。简单! :-)。我实际上不知道它是否会回滚上次访问日期。您将不得不自己测试。 这是指向有关NTFS事务的MSDN杂志文章的链接,其中包括其他链接。 http://msdn.microsoft.com/zh-CN/magazine/cc163388.aspx 希望能帮助到你。     

要回复问题请先登录注册