2009-02-06 13 views
1

J'ai un programme C# qui utilise SharpZIPlib pour décompresser certains fichiers zip? Cela fonctionne bien mais sur un fichier, je reçois toujours l'erreur "EOF inattendue"? Existe-t-il réellement un marqueur EOF ou le fichier Zip a-t-il été tronqué?Qu'est-ce que le marqueur EOF pour un fichier ZIP?

Répondre

6

Votre fichier a été tronqué (ou éventuellement étendu ou endommagé).

Vous pouvez exécuter le programme de décompression ordinaire dessus (par exemple 'unzip -l file.zip') pour le prouver. Incidemment, si vous avez utilisé FTP pour télécharger le fichier, vous souvenez-vous d'utiliser un transfert binaire? Si vous avez (accidentellement) utilisé le mode ASCII, cela ruinera tout fichier binaire tel qu'une archive ZIP.

2

EOF inattendu signifie exactement cela: lors de la lecture du fichier, la fonction a rencontré la fin du fichier et la bibliothèque attendait autre chose (données). Ce n'est pas un marqueur.

4

Un simple fichier ZIP ressemble à ceci:

LocalHeader1 
CompressedData1 
LocalHeader2 
CompressedData2 
[...] 
LocalHeaderN 
CompressedDataN 
CentralHeader1 
CentralHeader2 
[...] 
CentralHeaderN 
EndHeader 

Le EndHeader contient (entre autres) le décalage à la première CentralHeader, chaque CentralHeader contient un décalage à leur LocalHeader correspondant.

Certaines bibliothèques peuvent lire le fichier zip depuis le début pour traiter les LocalHeaders de manière séquentielle, récupérant ainsi ce qui peut être récupéré d'un fichier zip endommagé.

+0

Informations intéressantes - merci. –

+0

DotNetZip (http://dotnetzip.codeplex.com) peut éventuellement effectuer une analyse complète du fichier zip, en ignorant le répertoire. Cela vous permet de reconstruire le répertoire zip à partir des entrées zip existantes, pour un fichier corrompu ou tronqué. – Cheeso