每当我创建一个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
答案 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在[未来|过去]中总是只有几分钟?