2010-08-16 28 views
7

He utilizado anteriormente Chilkat Zip .Net para generar archivos de copia de seguridad desde mi aplicación, pero después de haber tenido problemas con el componente, me mudé a Xceed Zip .Net para la misma función.Corrección de encabezados de archivo ZIP corruptos

Si toma uno de los Zips generados con Chilkat e intenta extraer utilizando Xceed, 7Zip, WinZip, falla.

Si toma el mismo archivo y lo extrae con Chilkat, Windows Zip, WinRar, el archivo se extrae muy bien.

Al tener una lectura en Wikipedia sobre el formato de WinZip, investigué el directorio central y el encabezado del archivo local, y parece que el componente de Chilkat ha escrito el tamaño incorrecto del archivo de registro del directorio central. Si utiliza algo como FRHed para editar el registro central y hace que el tamaño del archivo sea el mismo que el tamaño del encabezado local, entonces todo se extrae correctamente.

¿Qué recomendarías que hiciera?

  1. Escribir una pequeña utilidad usando la biblioteca Chilkat para extraer el zip y luego volver a comprimir con la Biblioteca Xceed
  2. Leer el archivo Zip en busca de los marcadores Zip necesarios (como se define en la especificación) y luego corregir la central Encabezamiento.
  3. Alguna otra combinación.

Respuesta

2

Depende del número de copias de seguridad que haya generado su programa. Probablemente, sería más fácil descomprimirlos o recomprimirlos desde el programa o con las manos. Sin embargo, si hay muchos archivos, la mejor manera sería corregir los campos del registro del directorio central; debe escribir el código, que 1) busca para el directorio central; 2) para cada registro, va a la posición donde se almacena el encabezado del archivo local y lee el tamaño del archivo; 3) regrese al directorio central y escriba allí el tamaño de archivo válido; 4) Tenga cuidado con los archivos grandes, si están: el tamaño del archivo para archivos> 4Gb está escrito en extensión.

+0

Gracias. Lo que terminé haciendo es lo que escribiste, simplemente descomprimí los viejos archivos de respaldo, luego los volví a comprimir, PERO solo si el archivo exhibía el error en el registro. Hice una pequeña aplicación que se entrega como un módulo de soporte a nuestra aplicación para que la antigua biblioteca estuviera allí para su uso. –

Cuestiones relacionadas