Сохранить атрибуты файла в ZipFile - PullRequest
5 голосов
/ 09 июня 2010

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

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

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

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

1 Ответ

3 голосов
/ 10 июня 2010

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

Моя реализация будет работать на 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-файл, как вы хотите, с помощью некоторого приложения для Windows zip и запустите его на нем:

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)

Cheers!

...