C# 上次访问时间不正确

C# 上次访问时间不正确,c#,fileinfo,lastaccesstime,C#,Fileinfo,Lastaccesstime,每次我创建一个FileInfo对象并访问它的lastaccesstime属性时,它总是会关闭几分钟。文件属性窗口保持不变,但是应用程序显示它通常在属性窗口时间之后几分钟 此外,我注意到,如果我将文件拖到cmd窗口以将文件名作为参数传递,则访问时间大部分时间都会更新,但并不总是更新 这可能是什么原因造成的 以下是一个例子: static void Main(string[] args) { if (args.Length > 0) { FileInfo fi

每次我创建一个FileInfo对象并访问它的lastaccesstime属性时,它总是会关闭几分钟。文件属性窗口保持不变,但是应用程序显示它通常在属性窗口时间之后几分钟

此外,我注意到,如果我将文件拖到cmd窗口以将文件名作为参数传递,则访问时间大部分时间都会更新,但并不总是更新

这可能是什么原因造成的

以下是一个例子:

static void Main(string[] args)
{
    if (args.Length > 0)
    {
        FileInfo fi = new FileInfo(args[0].ToString());
        Console.WriteLine(args[0]);
        if (fi.Exists)
        {
            Console.Write("Current: " + DateTime.Now + "\n");
            Console.Write("LAT: " + fi.LastAccessTime + "\n");
            Console.Write("LWT: " + fi.LastWriteTime + "\n");
            Console.Write("CT: " + fi.CreationTime + "\n");
        }
        Console.ReadKey();
    }
}
嗯,可能是:

第一次调用时,FileSystemInfo 调用Refresh并返回缓存的 有关获取属性的API的信息 等等在随后的通话中,您 必须呼叫刷新以获取最新信息 资料副本

但是您会发现LAT总是在[未来|过去]的几分钟内出现?

关于文件时间分辨率和上次访问时间有这样的说法:

例如,在FAT上,创建时间的分辨率为10毫秒,写入时间的分辨率为2秒,访问时间的分辨率为1天(实际上是访问日期)。NTFS将文件的更新延迟到最后一次访问后的最后一次访问时间长达一小时


这意味着在FAT和NTFS上,最后一次写入时间通常不是很精确,尽管我不确定它们引用的确切值是否正确。

根据我的经验,最后一次访问时间是出了名的不可靠。根据

磁盘上的上次访问时间并不总是最新的,因为NTFS在强制对磁盘进行上次访问时间更新之前会寻找一个小时的间隔。当用户或程序对文件或文件夹执行只读操作(例如列出文件夹的内容或读取(但不更改)文件夹中的文件)时,NTFS还会延迟将上次访问时间写入磁盘

显然,内存中的副本是正确的,但根据我的经验,您可能会得到一个缓存值,该值可能已过时。另外,请注意,用户可能会关闭上次访问时间,并且在Vista和2008中默认情况下会关闭上次访问时间