2010-06-09 12 views
5

Estoy buscando una manera de conservar los atributos de archivo (por ejemplo, solo lectura) de un archivo que se escribe en una instancia zipfile.ZipFile.Conservar atributos de archivo en ZipFile

Los archivos que agrego al archivo zip obtienen sus atributos de archivo reseteados, ej. el indicador de solo lectura se ha ido al inspeccionar el archivo comprimido con las aplicaciones zip y luego de descomprimirlo.

Mi entorno actual es Windows y tengo problemas con el método ZipInfo.external_attr.

Seguramente debe haber una forma estándar de preservar los atributos del archivo al escribir en ZipFile?

+0

Por favor, edite su pregunta y explica "Tengo problemas". De lo contrario, no podemos ayudar. –

+0

La pregunta original es válida. Esa fue solo una nota al margen sobre las soluciones aquí en stackoverflow no funcionó, ya que no estoy implementando para Unix. Mala explicación, punto tomado. – Elijah

Respuesta

3

El problema que tuve fue el archivo zip fuertemente sin documentar.ZipInfo.external_attr. Todos los ejemplos que encontré de este objeto se relacionaron con el estilo de permiso del archivo * nix.

Mi implementación se ejecutará en Windows.

Así que me puse a hacer "ingeniería inversa". Je.

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

Si usted necesita encontrar el valor correcto para otro tipo de atributo de crear el archivo zip que tú: ZipInfo.external_attr es 33.

Como en

El número mágico para las ventanas de sólo lectura lo quiero con alguna aplicación zip de Windows y ejecutar esto en él:

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) 

¡Salud!

+0

Vea también http://stackoverflow.com/questions/434641/how-do-i-set-permissions-attributes-on-a-file-in-a-zip-file-using-pythons-zipf/6297838#6297838 . Tiene razón sobre el campo external_attr no documentado. –

+0

Tuve el mismo problema al usar "minizip" en Windows para preservar todos los atributos del archivo. Utilicé el siguiente código: DWORD attribs = GetFileAttributesW (szOut); \t \t zi.external_fa = attribs; –

Cuestiones relacionadas