2008-10-31 73 views
3

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

此外,我注意到,如果我将文件拖到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

回答

4

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

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

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

0

嗯,可能this from MSDN

当第一次调用,FileSystemInfo 呼叫刷新并返回上的API高速缓存 信息获得属性 a等等。在后续通话中,您必须拨打电话 以获取最新的 信息副本。

但是你看到LAT总是在[future | past]的几分钟内?

1

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

例如,在FAT,创建时间为10毫秒的分辨率,写入时间有2秒的分辨率,并获得时间有一天的分辨率(真的,访问日期)。在上次访问后最多一小时,NTFS会将文件的上次访问时间延迟更新。

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