Как переместить файл в Windows, не изменяя время модификации родительской папки назначения (Win32)? - PullRequest
1 голос
/ 22 февраля 2012

Похоже, что когда вы перемещаете / копируете файл из некоторой исходной папки в какую-либо папку назначения, Windows стремится изменить время модификации родительской папки *1002*.

Для копии оно изменяетсявремя изменения родительской папки назначения до настоящего момента.

Для перемещения похоже, что оно меняет как родительскую папку источника, так и время изменения родительской папки назначения на настоящее время.

Это для NTFS.

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

Как бы вы скопировали или переместили файл в Windows , не изменяя исходную / целевую родительскую папкувремя модификации , используя Win32 API?

1 Ответ

1 голос
/ 23 февраля 2012

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

Однако я считаю, что вы можете изменять временные метки в каталоге только в том случае, если у вас включена привилегия SE_RESTORE, поэтому вам нужно работать от имени администратора. (ПРИМЕЧАНИЕ: это , а не , потому что вам нужно указать FILE_FLAG_BACKUP_SEMANTICS для CreateFile, чтобы получить дескриптор каталога; вы можете сделать это без специальных привилегий.)

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

...