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

标签 windows ntfs lastaccesstime

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

这种方法原则上看起来不错,但一些测试应用程序早期版本的客户报告说,它正在更改大量文件的上次访问时间(这并不奇怪,因为它实际上是在访问文件)。这对这些客户来说是个问题,因为他们有基于文件最后访问时间的存档策略(例如,他们存档过去 12 个月内未访问过的文件)。因为我们的应用程序计划比存档“窗口”运行得更频繁,所以我们有效地阻止了这些文件中的任何一个被存档。

我们尝试添加一些代码以在读取文件之前保存每个文件的上次访问时间,然后再将其写回(我知道这很可怕)但这给另一个基于文件系统事务日志进行增量备份的客户带来了问题.我们对文件上次访问时间的显式设置导致这些文件包含在每个增量备份中,即使它们实际上并没有改变。

所以问题来了:在 Windows 环境中,有没有什么方法可以在不更新上次访问时间的情况下读取文件?

提前致谢!

编辑:尽管有“ntfs”标签,我们实际上不能依赖 NTFS 文件系统。我们的许多客户都在网络上运行我们的应用程序,因此它可以是另一端的任何东西。

最佳答案

documentation表明你可以做到这一点,尽管我自己从未尝试过。

To preserve the existing last access time for a file even after accessing a file, call SetFileTime immediately after opening the file handle with this parameter's FILETIME structure members initialized to 0xFFFFFFFF.

关于windows - 避免在读取文件时更新上次访问的日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5663766/

相关文章:

windows - 当我们传递用“(双引号)引用的参数时,批处理脚本出现问题

linux - .exe 文件如何与 Windows 内核交互? Linux .bin 文件相同

python - 使用 python 检查文件夹/文件 ntfs 权限

file - 如何在Haskell(跨平台)中获取文件访问时间?

c# - 在 Windows 8 中检测重启 - 未调用 SessionEnding

.net - SetSystemTime kernel32 中的奇怪行为

.net - 遇到枚举中未定义的 FileSystemRights 值

windows - NTFS 元数据中包含哪些信息?

android - Android 上的文件上次访问时间

bash - 上次访问时间未更新?