Время последнего доступа неверно
-
05-07-2019 - |
Вопрос
каждый раз, когда я создаю объект 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 альтернативный текст http://img380.imageshack.us/img380/7752/appgt0.png а> р>
Решение
По моему опыту, время последнего доступа, как известно, ненадежно. Согласно 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 всегда на несколько минут в [будущем | прошлом]?