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
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.
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.
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é.
Avez-vous essayé DotNetZip? http://www.codeplex.com/DotNetZip
Informations intéressantes - merci. –
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