c#获取文件上次访问权限或可用性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#获取文件上次访问权限或可用性相关的知识,希望对你有一定的参考价值。

我需要定期检查存储库中的所有文件并比较其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
答案

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

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

来源here

Bonus chatter:从Windows Vista开始,默认情况下禁用最后访问时间。实际上,这意味着与意外更改上次访问时间相关的错误数量将不加调整,因为默认情况下会禁用检测错误的机制。

来源here

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

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

以上是关于c#获取文件上次访问权限或可用性的主要内容,如果未能解决你的问题,请参考以下文章

Forge Viewer - 如何在场景中访问(或获取渲染/片段代理)克隆的网格?

如何获取目录的属性,例如上次访问和上次修改

使用Android导航组件时如何从后台获取片段?

Django REST框架--认证和权限

如何从 pysftp 获取上次修改时间

常用python日期日志获取内容循环的代码片段