2016-02-07 8 views
3

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

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

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

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

+0

Я ничего не знаю о C#, но я помню, что некоторые функции PHP не изменяют дату изменения даты, если вы явно не указали их тоже. Из этого я бы понял, что ваш ответ зависит от того, как файлы были изменены. – Carcigenicate

+1

Вместо того, чтобы отключать обновление, кажется, что вы можете восстановить временную метку модификации - см. [Это обсуждение] (http://superuser.com/questions/710014/how-to-disable-modified-time-stamp-in -windows). –

+1

IIRC, записывая файл в 'a \ b', изменит только дату изменения' b', а не 'a'. Таким образом, вы не можете просто пропускать любые каталоги с одинаковой датой изменения, вам все равно нужно перебирать структуру каталогов. –

ответ

2

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

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

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

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

Также FAT32 имеет около 2 second resolution for last write times. Это означает, что он не может точно записать последнюю измененную дату в секундах.

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

Есть правила, как отметка времени, решаются в filesystems

Кроме того, вы могли бы change the timestamp любых файлов и папок с помощью сторонних утилит легко.

0

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

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

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

0

В новых версиях 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
(работал для меня):

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

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