Время последнего доступа неверно

Каждый раз, когда я создаю объект 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

3 ответа

Решение

По моему опыту, время последнего доступа, как известно, ненадежно. Согласно 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 для получения атрибутов и т. Д. При последующих вызовах вы должны позвонить в "Обновить", чтобы получить последнюю копию информации.

Но вы видите, что LAT всегда на несколько минут в [будущем | прошлом]?

Другие вопросы по тегам