在ZipFile中保留文件属性

7
我正在寻找一种方法来保留写入到zipfile.ZipFile实例的文件属性(例如只读)。我添加到zip归档中的文件会重置它们的文件属性,例如,当使用zip应用程序检查归档并解压缩后,只读标志将消失。我的当前环境是Windows,我在使用ZipInfo.external_attr方法时遇到了问题。肯定有一种标准的方法可以在写入ZipFile时保留文件属性吧?

请编辑您的问题并解释“我遇到了问题”。否则,我们无法提供帮助。 - Aaron Digulla
原问题是有效的。那只是一些关于这里在stackoverflow上的解决方案不起作用的旁注,因为我没有为Unix实现。解释不好,但意思已经被理解了。 - aelgn
1个回答

5

我遇到的问题是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()

如果您需要找到另一种类型属性的正确值,请使用某些Windows zip应用程序创建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)

干杯!


请参见https://dev59.com/LXRC5IYBdhLWcg3wCMc6#6297838。您对未记录的external_attr字段是正确的。 - Faheem Mitha
我在Windows中使用“minizip”以保留所有文件属性时遇到了同样的问题。我使用了以下代码:DWORD attribs = GetFileAttributesW(szOut); zi.external_fa = attribs; - RP.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接