Сохраните атрибуты файла в ZipFile

Я ищу способ сохранить атрибуты файла (например, только для чтения) файла, который записан в a zipfile.ZipFile экземпляр.

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

Моя текущая среда является Windows, и у меня есть проблемы с методом ZipInfo.external_attr.

Конечно, должен быть стандартный способ сохранить атрибуты файла при записи в ZipFile?

5
задан Community 23 May 2017 в 10:32
поделиться

1 ответ

Моя проблема заключалась в сильно недокументированном zipfile.ZipInfo.external_attr. Все найденные мной примеры этого объекта относятся к стилю разрешений файла * nix.

Моя реализация будет работать в Windows.

Итак, я занялся «обратной инженерией». Хех.

Магическое число для Windows ZipInfo.external_attr, доступного только для чтения, равно 33.

Как в:

z = zipfile.ZipFile(targetFile, 'w')
(path, filename) = os.path.split(sourceFile)
bytes = file(sourceFile, 'rb')
info = zipfile.ZipInfo(filename)
info.external_attr = 33
z.writestr(info, bytes.read())
bytes.close()
z.close()

Если вам нужно найти правильное значение для другого типа атрибута, создайте zip-файл, как вы хотите, с некоторыми zip-файлами Windows. app и запустите на нем следующее:

z = zipfile.ZipFile(sourceFile, 'r')
info = z.getinfo('fileToTest.ext')
print ("create_system", info.create_system)
print ("external_attr", info.external_attr)
print ("internal_attr", info.internal_attr)

Ура!

3
ответ дан 15 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: