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

替代文字http://img407.imageshack.us/img407/4728/propertiesox6巴纽 alt text http://img380.imageshack.us/img380/7752/appgt0.png

有帮助吗?

解决方案

根据我的经验,上次访问时间是出了名的不可靠。根据 http://technet.microsoft.com/en-us/library/ cc781134.aspx ...

  

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

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

其他提示

MSDN文章,其中包含有关文件时间的基本信息有关于文件时间分辨率和上次访问时间的说法:

  

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

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

嗯,可能是来自MSDN

  

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top