Надежно ли использовать последнюю измененную метку времени каталога при создании резервной копии?
Я разрабатываю простой инструмент инкрементного резервного копирования. Возможно ли, что после того, как я изменю содержимое каталога, атрибут "Last Modified" этого каталога останется нетронутым? Причиной может быть сбой NTFS или ошибка, Я не знаю.
Я узнал, что есть вариант NtfsDisableLastAccessUpdate
. Можно ли также отключить обновление метки времени модификации?
Я хочу знать, насколько надежен этот атрибут, поэтому я могу решить, стоит ли использовать его для резервного копирования файловая система.
Я использую FileSystemInfo.LastWriteTime
для извлечения этой информации в C#.
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".