Надежно ли использовать последнюю измененную метку времени каталога при создании резервной копии?


Я разрабатываю простой инструмент инкрементного резервного копирования. Возможно ли, что после того, как я изменю содержимое каталога, атрибут "Last Modified" этого каталога останется нетронутым? Причиной может быть сбой NTFS или ошибка, Я не знаю.

Я узнал, что есть вариант NtfsDisableLastAccessUpdate. Можно ли также отключить обновление метки времени модификации?

Я хочу знать, насколько надежен этот атрибут, поэтому я могу решить, стоит ли использовать его для резервного копирования файловая система.

Я использую FileSystemInfo.LastWriteTime для извлечения этой информации в C#.

3 3

3 ответа:

Я не думаю, что последняя измененная метка времени надежна.

Метка времени определяется тем, какую файловую системувы используете.

Например, FAT32 использует локальную метку времени при работе с измененным/созданным временем.

В то время как NTFS использует часовой пояс UTC.

Также, FAT32 имеет около 2-секундное разрешение для последнего времени записи. Это означает, что он не может точно записать последнюю измененную дату в секундах.

Кроме того , когда вы копируете файлы из FAT32 в NTFS, вы видите целую кучу других проблем с метками времени .

Существуют правила, как временные метки определяются файловыми системами

Кроме того , вы можетелегко изменить метку времени любых файлов и папок, используя сторонние инструменты.

FSUTIL помогает изменить метку времени. пример команды - fsutil behavior set disablelastaccess 1

Этот сайт может помочь вам понять параметры. https://technet.microsoft.com/en-us/library/cc785435.aspx

Надеюсь, что это полезно для вашего проектирования.

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

См.
https://blogs.technet.microsoft.com/asiasupp/2010/12/14/file-date-modified-property-are-not-updating-while-modifying-a-file-without-closing-it/
и
https://social.technet.microsoft.com/Forums/windowsserver/en-US/2b8baca2-9c1b-4d80-80ed-87a3d6b1336f/file-timestamp-not-updating-on-2008-but-does-on-2003?forum=winservergen&prof=required

Для пакетных файлов не было предложено никакого надежно работающего программного решения.
ненадежным решением для пакетных файлов был вызов dir для файлов, которым требовались даты их модификации, чтобы быть актуальными.

С другой стороны, они упомянули программный обходной путь с использованием Windows API
(работал на меня.):

Поскольку обходной путь заключается в том, чтобы любой процесс открывал и закрывал дескриптор для файлов журнала, было написано средство, чтобы сделать именно это, а также получить информацию о файле, используя следующие API:
CreateFile
GetFileInformationByHandle
CloseHandle

Я знаю, что, например, выдача "Refresh" в приложении "XPlorer2" каким-то образом запускает обновление, так что все приложения начнут видеть обновленные метки времени "last modified".