2010-06-09 88 views
5

我正在尋找一種方法來保存寫入zipfile.ZipFile實例的文件的文件屬性(例如,只讀)。在ZipFile中保留文件屬性

我添加到zip歸檔文件的文件將重置它們的文件屬性,例如。在使用zip應用程序檢查歸檔文件並解壓縮後,只讀標誌消失。

我目前的環境是Windows,我遇到了ZipInfo.external_attr方法的問題。

當寫信給ZipFile時,肯定有一個標準的保存文件屬性的方法嗎?

+0

請編輯您的問題並解釋「我遇到問題」。否則,我們無法幫助。 – 2010-06-09 15:29:46

+0

原始問題有效。這僅僅是關於stackoverflow diddnt工作的解決方案,因爲我沒有爲unix實現。 雖然不好說明,但需要注意。 – Elijah 2010-06-10 14:48:25

回答

3

我遇到的問題是大量沒有記錄的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() 

如果你需要找到另一種類型屬性的正確值創建壓縮文件,你想要它與一些Windows壓縮應用程序,並運行它:

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) 

乾杯!

+0

另請參閱http://stackoverflow.com/questions/434641/how-do-i-set-permissions-attributes-on-a-file-in-a-zip-file-using-pythons-zipf/6297838#6297838 。你對沒有記錄的external_attr字段是正確的。 – 2011-06-09 19:05:59

+0

我在Windows中使用「minizip」預先保存所有文件屬性時遇到了同樣的問題。我用下面的代碼:DWORD attribs = GetFileAttributesW(szOut); \t \t zi.external_fa = attribs; – 2013-03-05 07:48:23