Время последнего доступа неверно - PullRequest
3 голосов
/ 31 октября 2008

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

4 голосов
/ 02 ноября 2008

По моему опыту, время последнего доступа, как известно, ненадежно. Согласно http://technet.microsoft.com/en-us/library/cc781134.aspx...

Время последнего доступа на диске не всегда актуально, поскольку NTFS ищет интервал в один час перед принудительным обновлением времени последнего доступа к диску. NTFS также задерживает запись времени последнего доступа на диск, когда пользователи или программы выполняют операции только для чтения с файлом или папкой, например, выводят содержимое папки или читают (но не изменяют) файл в папке.

Очевидно, что копия в памяти будет правильной, но по моему опыту вы можете получить кэшированное значение, которое может быть устаревшим. Также обратите внимание, что время последнего доступа может быть отключено пользователем и отключено по умолчанию в Vista и 2008.

1 голос
/ 01 ноября 2008

В статье MSDN с базовой информацией о времени файла есть что сказать о разрешении времени файла и времени последнего доступа:

Например, в FAT время создания имеет разрешение 10 миллисекунд, время записи имеет разрешение 2 секунды, а время доступа имеет разрешение 1 день (в действительности, дата доступа). NTFS задерживает обновление до последнего времени доступа к файлу до одного часа после последнего доступа.

Это будет означать, что как в FAT, так и в NTFS время последней записи, как правило, будет не очень точным, хотя я не уверен, что точные значения, которые они указывают, верны.

0 голосов
/ 31 октября 2008

Хм, возможно это из MSDN :

При первом вызове FileSystemInfo вызывает Refresh и возвращает кешированный информация об API для получения атрибутов и так далее. При последующих звонках вы необходимо позвонить Обновить, чтобы получить последнюю копия информации.

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

...