Я ищу способ сохранить атрибуты файла (например, только для чтения) файла, который записан в a zipfile.ZipFile
экземпляр.
Файлы, которые я добавляю к архиву zip, сбрасывали свои атрибуты файла, например, флага только для чтения не стало при осмотре архива с приложениями zip и после того, как разархивировали.
Моя текущая среда является Windows, и у меня есть проблемы с методом ZipInfo.external_attr.
Конечно, должен быть стандартный способ сохранить атрибуты файла при записи в ZipFile
?
Моя проблема заключалась в сильно недокументированном 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)
Ура!