3

每次我创建一个 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.png 替代文字 http://img380.imageshack.us/img380/7752/appgt0.png

4

3 回答 3

4

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

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

Apparently, the in-memory copy will be correct, but in my experience, you may get a cached value which may be out of date. Also, note that last access time may be turned off by the user, and is turned off by default in Vista and 2008.

于 2008-11-02T19:49:11.243 回答
1

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

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

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

于 2008-11-01T01:17:27.400 回答
0

嗯,这可能来自 MSDN

首次调用时,FileSystemInfo 调用 Refresh 并返回 API 上的缓存信息以获取属性等。在随后的调用中,您必须调用 Refresh 以获取信息的最新副本。

但是您看到 LAT 总是在 [未来|过去] 的几分钟内?

于 2008-10-31T18:49:45.997 回答