Как я могу скопировать файлы только для чтения с глубокими путями и сохранить метаданные времени файла? - PullRequest
2 голосов
/ 21 сентября 2009

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

В настоящее время я копирую файлы, используя вызов WINAPI с префиксом "\\? \", Как предложено здесь . После копирования файла я использую метаданные времени файла (созданные, доступные, измененные) из исходного файла и задаю время в целевом файле. У меня проблема при попытке применить эту логику к файлу только для чтения.

Это то, что я пытался сделать до сих пор:

  1. Скопируйте файл.
  2. Удалите флаг ReadOnly из пункта назначения с помощью SetFileAttributes после вызова GetFileAttributes.
  3. GetFileTime (оригинал)
  4. SetFileTime (назначение) (с исходным временем файла)
  5. Снова установите флаг readonly.

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

1 Ответ

5 голосов
/ 21 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...