Время последнего доступа неверно
Каждый раз, когда я создаю объект 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 всегда на несколько минут в [будущем | прошлом]?