1

I need to inspect all files within a Repository periodically and compare its LastAccessTime in order to know when was the last time that file was used (accessed, modified and/or updated).

I've already been tried with File.GetLastAccessTime() and FileInfo.LastAccessTime, but I always get the same DateTime after open/close it, or read it.

How could I know when a file has been used?

Thanks!

string path = System.Environment.CurrentDirectory + "/testing/doc2.txt"
Console.WriteLine("--------------------------------------");
Console.WriteLine("GetLastAccessTime {0}", File.GetLastAccessTime(path));
Console.WriteLine("GetLastAccessTimeUtc {0}", File.GetLastAccessTimeUtc(path));
Console.WriteLine("Directory.GetLastAccessTime {0}", Directory.GetLastAccessTime(path));
FileInfo fi = new FileInfo(path);
Console.WriteLine("fi.LastAccessTime {0}", fi.LastAccessTime);

output:

GetLastAccessTime           12/18/2018 11:41:15 AM
GetLastAccessTimeUtc        12/18/2018 4:41:15 PM
Directory.GetLastAccessTime 12/18/2018 11:41:15 AM
fi.LastAccessTime           12/18/2018 11:41:15 AM
--------------------------------------
GetLastAccessTime           12/18/2018 11:41:15 AM
GetLastAccessTimeUtc        12/18/2018 4:41:15 PM
Directory.GetLastAccessTime 12/18/2018 11:41:15 AM
fi.LastAccessTime           12/18/2018 11:41:15 AM
4

1 回答 1

1

最重要的是,您使用的是什么文件系统。我想它是NTFS。然后有几句话:

文件的上次访问时间戳是打开该文件进行读取或写入的最后日期和时间。所以每次用户访问一个文件时,这个时间戳都需要更新,这有点开销,特别是如果你不太热衷于这个文件属性。为了提高 Windows 10(以及从 Windows Vista 开始的早期版本)中 NTFS 文件系统的性能,文件和目录的最后访问时间不会更新。

来源在这里

奖励喋喋不休:从 Windows Vista 开始,默认情况下禁用维护上次访问时间。实际上,这意味着与意外更改上次访问时间相关的错误数量将成倍增加,因为默认情况下检测错误的机制是禁用的。

来源在这里

还有一个链接,似乎还有另一种行为。

最后一个链接 FAT。我不太确定,因为我上次只阅读了很多很多年前的 FAT12 (软盘驱动器/软盘)描述,但是在 FAT 文件系统中可能没有空间来存储上次访问时间,只存储了日期。对于 Microsoft 提供的带有长文件名的扩展名,我无法确认这一点。

于 2018-12-19T18:22:49.050 回答