正如 James 指出的LastAccessTime 没有更新。
自 Vista 以来,LastWriteTime 也发生了变化。当进程仍然打开文件并且另一个进程检查 LastWriteTime 时,它将很长时间看不到新的写入时间——直到进程关闭文件。
作为一种解决方法,您可以从外部进程打开和关闭文件。完成后,您可以尝试再次读取 LastWriteTime,这是最新的值。
文件系统隧道:
如果应用程序实现了类似滚动记录器的功能,它会关闭文件然后将其重命名为不同的文件名,那么您也会遇到问题,因为操作系统会记住“旧”文件的创建时间和文件大小,尽管您确实创建了一个新文件。这包括文件大小的错误报告,即使您确实从头开始重新创建 log.txt,其大小仍然为 0 字节。此功能称为 OS 文件系统隧道,它仍然存在于 Windows 8.1 中。如何解决此问题的示例请查看Enterprise Library 中的 RollingFlatFileTracelistener。
您可以从 cmd shell 查看文件系统隧道在您自己的机器上的效果。
echo test > file1.txt
ren file1.txt file2.txt
Wait one minute
echo test > file1.txt
dir /tc file*.txt
...
05.07.2015 19:26 7 file1.txt
05.07.2015 19:26 7 file2.txt
文件系统是一个状态机。如果您关心性能和正确性,则很难保持状态正确同步。
这种奇怪的隧道综合症显然仍然被应用程序使用,例如自动保存文件并将其移动到保存位置,然后在同一位置再次重新创建文件。对于这些应用程序,给文件一个新的创建日期是有意义的,因为它只是被复制的。一些安装程序也会使用这种技巧将文件临时移动到不同的位置并稍后将内容写回以通过某些文件存在检查某些安装挂钩。