LastAccess时间不正确

时间:2008-10-31 18:24:37

标签: c# fileinfo lastaccesstime

每当我创建一个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();
    }
}

alt text http://img407.imageshack.us/img407/4728/propertiesox6.png alt text http://img380.imageshack.us/img380/7752/appgt0.png

3 个答案:

答案 0 :(得分:4)

根据我的经验,上次访问时间是出了名的不可靠。根据{{​​3}} ...

  

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

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

答案 1 :(得分:1)

The MSDN article with basic info about file times有关于文件时间分辨率和上次访问时间的说法:

  

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

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

答案 2 :(得分:0)

嗯,可能是this from MSDN

  

首次调用时,FileSystemInfo   调用Refresh并返回缓存   有关获取属性的API的信息   等等。在随后的电话中,你   必须调用Refresh才能获得最新信息   信息的副本。

但是你看到LAT在[未来|过去]中总是只有几分钟?