c # Получить последний доступ к файлу или удобство использования

Мне нужно периодически проверять все файлы в репозитории и сравнивать его LastAccessTime, чтобы узнать, когда в последний раз этот файл использовался (доступ, изменение и/или обновление).

Меня уже пробовали с File.GetLastAccessTime() и FileInfo.LastAccessTime, но я всегда получаю одно и то же DateTime после открытия/закрытия или чтения.

Как я могу узнать, когда файл был использован?

Спасибо!

string path = System.Environment.CurrentDirectory + "/testing/doc2.txt"
Console.WriteLine("--------------------------------------");
Console.WriteLine("GetLastAccessTime {0}", File.GetLastAccessTime(path));
Console.WriteLine("GetLastAccessTimeUtc {0}", File.GetLastAccessTimeUtc(path));
Console.WriteLine("Directory.GetLastAccessTime {0}", Directory.GetLastAccessTime(path));
FileInfo fi = new FileInfo(path);
Console.WriteLine("fi.LastAccessTime {0}", fi.LastAccessTime);

вывод:

GetLastAccessTime           12/18/2018 11:41:15 AM
GetLastAccessTimeUtc        12/18/2018 4:41:15 PM
Directory.GetLastAccessTime 12/18/2018 11:41:15 AM
fi.LastAccessTime           12/18/2018 11:41:15 AM
--------------------------------------
GetLastAccessTime           12/18/2018 11:41:15 AM
GetLastAccessTimeUtc        12/18/2018 4:41:15 PM
Directory.GetLastAccessTime 12/18/2018 11:41:15 AM
fi.LastAccessTime           12/18/2018 11:41:15 AM

person Leonardo    schedule 18.12.2018    source источник
comment
Вы говорите, что File.GetLastAccessTime() не отражает, когда файл был открыт или прочитан?   -  person Martin    schedule 18.12.2018
comment
Прочтите раздел «Примечания» документа documentation и убедитесь, что ваш случай не подпадает ни под одно из этих условий.   -  person Sam W    schedule 18.12.2018
comment
Из документации, которую упоминает @SamW: Этот метод может возвращать неточное значение, поскольку он использует собственные функции, значения которых не могут постоянно обновляться операционной системой.   -  person Martin    schedule 18.12.2018
comment
Можете ли вы добавить свой код? Вы уверены, что путь к файлу правильный? В соответствии с здесь вы все равно получите значение по умолчанию DateTime, если файлы не существуют. Что DateTime вы получаете?   -  person Sam W    schedule 18.12.2018
comment
@SamW ты понял это выше   -  person Leonardo    schedule 18.12.2018
comment
@Leonardo Какой DateTime вы ожидаете, если 11:41:15 не правильно? Ваша файловая система FAT, NTFS или что-то еще?   -  person Sam W    schedule 19.12.2018
comment
Формат @SamW DateTime правильный, но всегда получает одно и то же значение, даже если после открытия или чтения файла.   -  person Leonardo    schedule 19.12.2018
comment
@ Леонардо, кажется, ты прав. Я тестировал на NTFS и FAT16 (флешка). Результат: NTFS: время не изменилось даже после перезаписи файла. время последнего доступа = время создания; тестовый файл был тестовым приложением. FAT16: время последнего доступа верно в 0:00:00 (полночь) по Гринвичу +1 (мой часовой пояс — CET), это означает 23:00:00 предыдущего дня по UTC, и 1 :00:00 для периода экономии времени (летнее время). Проверено в Windows 7.   -  person Julo    schedule 19.12.2018
comment
Я знаю, что формат правильный, но в какое время он должен вернуться? Опять же, какая у вас файловая система?   -  person Sam W    schedule 19.12.2018
comment
@SamW NTFS, и я ожидаю, что после открытия / чтения файла я получу другую дату и время (конечно, немного более новую). Итак, моя идея состоит в том, чтобы ежедневно сравнивать DateTime этого файла, и, если он отличается, это будет означать, что файл использовался (открыт или прочитан или что-то еще)   -  person Leonardo    schedule 19.12.2018


Ответы (1)


Самое главное, какую файловую систему вы используете. Я предполагаю, что это NTFS. Затем несколько цитат:

Метка времени последнего доступа к файлу — это последняя дата и время, когда этот файл был открыт для чтения или записи. Таким образом, каждый раз, когда пользователь получает доступ к файлу, эту метку времени необходимо обновлять, что требует больших затрат, особенно если вы не слишком заинтересованы в этом атрибуте файла. Для повышения производительности файловой системы NTFS в Windows 10 (и предыдущих версиях, начиная с Windows Vista) время последнего доступа к файлам и каталогам НЕ обновляется.

Источник здесь

Бонусная болтовня: начиная с Windows Vista, сохранение времени последнего доступа по умолчанию отключено. На практике это означает, что количество ошибок, связанных со случайным изменением времени последнего доступа, будет множиться без проверки, поскольку механизм обнаружения ошибки по умолчанию отключен.

Источник здесь

И еще одна ссылка, где, похоже, есть еще одно поведение .

И последняя ссылка для FAT. Я не уверен, поскольку в последний раз я читал только описание FAT12 (дискеты/дискеты) много-много раз назад, но, вероятно, в файловых системах FAT нет места для хранения последнего времени доступа. , сохраняется только дата. Я не могу подтвердить это для расширения Microsoft, предоставленного с длинными именами файлов.

person Julo    schedule 19.12.2018