2010-06-09 17 views
5

Sto cercando un modo per conservare gli attributi del file (ad esempio la lettura sola) di un file che viene scritto in un'istanza zipfile.ZipFile.Conserva gli attributi del file in ZipFile

I file aggiunti all'archivio zip ottengono il ripristino degli attributi del file, ad es. il flag di sola lettura è scomparso durante l'ispezione dell'archivio con le applicazioni zip e dopo la decompressione.

Il mio ambiente corrente è Windows e sto riscontrando problemi con il metodo ZipInfo.external_attr.

Sicuramente ci deve essere un modo standard per preservare gli attributi dei file durante la scrittura su ZipFile?

+0

Per favore modifica la tua domanda e spiega "Sto avendo problemi". Altrimenti, non possiamo aiutare. –

+0

La domanda originale è valida. Questa era solo una nota a margine sulle soluzioni qui su Stackoverflow non funzionava, dal momento che non sto implementando per Unix. Scarsa spiegazione, punto preso. – Elijah

risposta

3

Il problema che avevo era il file zip pesantemente non documentato. ZipInfo.external_attr. Tutti gli esempi che ho trovato di questo oggetto sono stati trasferiti allo stile di autorizzazione del file * nix.

La mia implementazione verrà eseguita su Windows.

Così ho fatto un po 'di "reverse engineering". Eh.

Il numero magico per le finestre di sola lettura ZipInfo.external_attr è 33.

Come in:

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() 

Se hai bisogno di trovare il valore corretto per un altro tipo di attributo creare il file zip come si Lo voglio con qualche app per windows zip ed eseguilo su di esso:

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!

+0

Vedere anche http://stackoverflow.com/questions/434641/how-do-i-set-permissions-attributes-on-a-file-in-a-zip-file-using-pythons-zipf/6297838#6297838 . Hai ragione riguardo al campo external_attr non documentato. –

+0

Sono entrato nello stesso problema mentre si utilizzava "minizip" in Windows per preselezionare tutti gli attributi del file. Ho usato il seguente codice: DWORD attribs = GetFileAttributesW (szOut); \t \t zi.external_fa = attribs; –

Problemi correlati