C#获取文件的最后访问或可用性

时间:2018-12-18 17:43:16

标签: c# file system.io.fileinfo lastaccesstime

我需要定期检查存储库中的所有文件,并比较其LastAccessTime,以了解何时最后一次使用(访问,修改和/或更新)该文件。

我已经尝试使用File.GetLastAccessTime()和FileInfo.LastAccessTime,但是在打开或关闭它或读取它后,我总是得到相同的DateTime。

我怎么知道什么时候使用了文件?

谢谢!

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);

输出:

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

1 个答案:

答案 0 :(得分:0)

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

  

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

来源here

  

奖励聊天:从Windows Vista开始,默认情况下,禁用保持上次访问时间。实际上,这意味着与更改上次访问时间有关的错误数目将未经检查地成倍增加,因为默认情况下会禁用检测错误的机制。

来源here

还有one more link,似乎还有另一种行为。

还有last link for FAT。我不太确定,因为很多人以前都只读FAT12 (软盘驱动器/磁盘)描述,但是在FAT文件系统中可能没有空间来存储上次访问时间,仅存储日期。对于Microsoft提供的带有长文件名的扩展名,我无法确认。