2010-08-16 14 views
7

In precedenza utilizzavo Chilkat Zip .Net per generare file di backup dalla mia applicazione, ma dopo aver riscontrato problemi con il componente, spostato su Xceed Zip .Net per la stessa funzione.Correzione di file ZIP danneggiati Intestazioni

Se si prende una delle Zips generate con il Chilkat e si tenta di estrarre usando Xceed, 7Zip, WinZip, fallisce.

Se si prende lo stesso file ed estratto con Chilkat, Windows Zip, WinRar, il file viene estratto correttamente.

Dopo aver letto su Wikipedia il formato WinZip, ho esaminato la directory centrale e l'intestazione del file locale, e sembra che il componente Chilkat abbia scritto in modo errato il record del registro della directory centrale. Se si utilizza qualcosa come FRHed per modificare il record centrale e rendere la dimensione del file uguale alla dimensione dell'intestazione locale, tutto viene estratto correttamente.

Cosa mi consigliate di fare?

  1. Scrivi una piccola utility che utilizza la libreria Chilkat per estrarre la zip e poi ricomprimere con la Xceed Biblioteca
  2. Leggere il file Zip alla ricerca dei marcatori Zip necessario (come definito nelle specifiche) e quindi correggere la centrale Intestazione.
  3. Un'altra combinazione.

risposta

2

Dipende dal numero di backup generati dal programma. Probabilmente, sarebbe più facile decomprimerli/ricomprimerli dal programma o dalle mani. Tuttavia, se ci sono molti file, il modo migliore sarebbe quello di correggere i campi dei record della directory centrale: dovresti scrivere il codice, che 1) cerca nella directory centrale; 2) per ogni record, passa alla posizione in cui è memorizzata l'intestazione del file locale e legge la dimensione del file; 3) tornare alla directory centrale e scrivere lì le dimensioni del file valido; 4) Attenzione ai file di grandi dimensioni, se lo sono - dimensione del file per i file> 4 GB è scritto in estensione.

+0

Grazie. Quello che ho finito è quello che hai scritto, ho solo decompresso i vecchi file di backup, quindi li ho ricompressi MA solo se il file stesso mostrava l'errore nel record. Ho creato una piccola applicazione che è stata consegnata come modulo di supporto alla nostra applicazione in modo che la vecchia libreria fosse lì per l'uso. –

Problemi correlati