12
votes

Comment vérifier rapidement si un fichier zip est corrompu?

Quelqu'un a-t-il des idées sur la manière de vérifier de manière pragmatique si un fichier zip est corrompu en fonction de la taille du fichier? Idéalement, la meilleure façon de vérifier si un zip est corrompu est de faire une vérification de la CRC, mais cela peut prendre beaucoup de temps surtout s'il y a beaucoup de gros fichiers zip. Je serais heureux d'être capable de faire une taille de fichier rapide ou une vérification de l'en-tête.

Merci d'avance.


1 commentaires

J'utilise actuellement C # pour ma tâche, mais la langue n'a pas d'importance.


4 Réponses :


5
votes

Section 4.3.7 de cette page dit que la taille comprimée est de 4 octets à partir de l'octet 18. Vous pouvez essayer de lire cela et le comparer à la taille du fichier.

Cependant, je pense qu'il est à peu près inutile de vérifier si le fichier zip est corrompu pour deux raisons:

  1. Certains fichiers zip contiennent plus d'octets que de la partie zippée. Par exemple, Archives auto-extraites avoir une partie exécutable mais elle est toujours valide zip.
  2. Le fichier peut être corrompu sans changer sa taille.

    Donc, je suggère de calculer le CRC pour une méthode garantie de vérification de la corruption.


3 commentaires

En outre, de nombreux outils de création zip écriront l'en-tête avant de connaître la longueur du fichier, de sorte que ces octets restent zéro (pour supporter le streaming, vraisemblablement).


Ce que @Simonj a dit est vrai, mais aussi - la taille comprimée à partir de l'octet 18 est la taille comprimée d'une seule entrée dans le fichier zip. Ce n'est pas la taille comprimée du fichier zip.


De plus, cela peut être évident, mais la peine d'être indiquée: "Calcul de la CRC" fonctionne pour vérifier le fichier, uniquement si le CRC original est connu.



6
votes

DotNetZip , une bibliothèque open source gratuite pour la gestion des fichiers zip dans les langues .NET, prend en charge un Catégorie () méthode qui fait ce que vous voulez. Il existe différents niveaux d'assurance disponibles à votre option. Le niveau de base vérifie simplement la cohérence des métadonnées. Le niveau le plus complet effectue une extraction complète du fichier zip dans un bitbucket pour vérifier que les données compressées réelles ne sont pas corrompues.


2 commentaires

Codépex est mort et ces pages sont maintenant "archives".


Cela pourrait être le même code? GITUB.COM/DINOCHIESA/DOTNETZIP



1
votes

Pour vérifier l'ensemble de l'archive "à coup sûr", vous devez extraire toutes les données (puisque CRC, stockée dans les archives, est calculée sur des données non compressées) et, même après que vous ne puissiez pas être sûr pour 100% qu'il n'est pas corrompu (Parce que CRC est bon, mais ne garantit pas que les données n'étaient pas modifiées).


0 commentaires

15
votes

Utiliser zip -t pour tester le fichier corrompu ou non. Échantillon de fichier corrompu ressemble à ceci: xxx


1 commentaires

Très utile. Peut également être utilisé pour distinguer les par ex. Les fichiers DOC et DOCX où l'extension de fichier n'est pas fiable.