IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Fichiers zip identiques mais checksum different


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut Fichiers zip identiques mais checksum different
    Bonjour a tous.

    Voila, je developpe une application d'archivage de modèles. Ces modèles sont composés de beaucoup de fichiers répartis dans des dossiers dont les noms suivent une norme.
    J'ai donc choisi de compresser les différents dossiers en zip puis de calculer pour chacun un checksum. Ce checksum n'as plus qu'a etre comparé avec le checksum de la version précédente pour savoir si un fichier du dossier (et par conséquent le fichiers zip) à été modifié.
    D'une version à l'autre, un dossier peut etre identique (dans le sens où tous les fichiers du dossier sont identiques) donc je m'attendais a ce que le fichiers zip qui en resulte soit identique. Ce qui n'est pas le cas.

    Je me suis donc dit que c'était à cause des dates de création, de dernier accès et de dernière écriture qui ne sont pas les mèmes entre les fichiers zip. J'ai donc intégré cela à mon programme et alors les checksums ne sont toujours pas identiques.
    Donc maintenant je me demande si c'est vraiment possible de faire ce que je veut:
    Créer à deux instants différents deux fichiers zip ayant le mème contenu et disposant du même checksum.

    Si quelqu'un a une idée elle serait la bienvenue.

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je dis peut être une bétise, mais le checksum n'est il pas une somme des bits du fichier zip ?
    Si c'est le cas, est ce que le chemin complet du fichier rentre dans ce compte ? (ils sont différents puisque répertoires différents)
    Est ce que l'écart est énorme ?

    Bah sinon, il ne te reste plus qu'à comparer l'ensemble des fichiers des différents répertoires pour repérer s'il y a des modifications.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    Le problème ici étant que les chemins sont totalement identiques !!!
    Meis ton idée soulève encore un autre problème !! Youpi !!!

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Le problème ici étant que les chemins sont totalement identiques
    Dans ce cas tes 2 zip n'ont pas le même nom (ou alors tu en supprimes un avant de refaire l'autre), et toujours pareil, le nom peut il entrer en jeu dans le calcul ?

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Dans ce cas tes 2 zip n'ont pas le même nom (ou alors tu en supprimes un avant de refaire l'autre), et toujours pareil, le nom peut il entrer en jeu dans le calcul ?
    Mème pas, les fichiers sont rigoureusement identiques.
    Je commence à m'arrache les cheveux.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    En fait mon application va chercher les fichiers dans un dossier et crée les fichiers zip correspondants (dont les noms sont normalisés). Puis j'utilise PVCS pour archiver sur une base de données distante. Enfin je supprime les fichiers .zip locaux.
    Lors de mes tests, je supprime un fichier dans un dossier, donc au moment d'archiver, il doit me dire qu'un des fichiers zip qu'il génère à changé. Mais au lieu de ca, tous les fichiers sont différents.

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je suppose que tu veux faire ton test avec le checksum car tu te dit qu'avec la taille du zip, par manque de chance avec la taille tu pourrais avoir 2 Zip de taille identique mais avec des fichiers différents.
    Mais si tu vérifie l'égalité de taille à l'octet près, tu manquerais vraiment de chance pour tomber dans le cas cité plus haut non ?

    Sinon te reste plus qu'à faire une liste des ficheirs avec leurs dates de création, de modifications, leur noms, et leur taille, et à vérifier s'il y a des modifications de cette liste, à chaque fois que tu vérifie le changement de version.

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je ne connais pas l'algorithme de compression pour les zip, mais je ne suis pas sur que la compression de fichiers soient toujours la même. Le taux de compression ne peut il pas dépendre de facteur comme la charge processeur ?
    N'y a t'il pas un tas de chose qui pourrait intervenir pour modifier ne serait qu'un peu le taux de compression et donc la taille du zip ? Et donc la valeur du checksum ?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    A mon avis il y a plusieurs type de compression.
    Quand on utilise Winrar, on peut voir qu'il propose 6 types de compression pour un fichier .zip (compression normale, compression optimale ...)
    Ca doit jouer dessus a mon avis.

  10. #10
    Membre éprouvé Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Par défaut
    chaque fichier zip contient un crc32 des fichers archivés. Tu pourrais lire ce header et comparer les crc entre 2 fichiers zip. Je crois que ça pourrais même te donner le nom des fichiers qui diffèrent directos (vu qu'ils doivent etre dans le header, mais à vérifier).
    a+

  11. #11
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    Citation Envoyé par toxycyty Voir le message
    A mon avis il y a plusieurs type de compression.
    Quand on utilise Winrar, on peut voir qu'il propose 6 types de compression pour un fichier .zip (compression normale, compression optimale ...)
    Ca doit jouer dessus a mon avis.
    En effet, il y bien plusieurs types de compression seulement dans mon appli j'ai fixé ce type de compression donc cela ne peut pas rentrer en compte dans les différences.

    Citation Envoyé par Onlava Voir le message
    chaque fichier zip contient un crc32 des fichers archivés. Tu pourrais lire ce header et comparer les crc entre 2 fichiers zip. Je crois que ça pourrais même te donner le nom des fichiers qui diffèrent directos (vu qu'ils doivent etre dans le header, mais à vérifier).
    a+
    Je viens de comparer tous les CRC des deux fichiers et ils sont tous identiques. Enfin voila je commence à me taper la tête contre les murs.

    Si je me rappèle bien mes cours de Systèmes d'exploitation, les dates (modification, dernière lecture et dernière écriture) ne sont pas stoquées dans le fichier mais dans l'inode contenant le fichier non ? D'ailleur je viens de faire le test et c'est bien le cas, les dates ne changent rien au checksum.

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Bah sinon, tu peux tout simplement comparer les fichiers contenus dans les zip un à un.
    Ils ont le même nom, et tu compares leur checksum, leur taille, leur date de création, leur date de modification.
    Ensuite tu pondère chacune de ces données, et si tu estimes que au bout d'un certain nombre de changement, ils sont différents. Bref si les checksums sont diff, la taille identique, et les dates de modif diffs, alors il y a eu modification.
    Mais bon si tu fais le checksum sur chacun des fichier, je pense qu'il y aura moins de différence.

  13. #13
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Bah sinon, tu peux tout simplement comparer les fichiers contenus dans les zip un à un.
    Ils ont le même nom, et tu compares leur checksum, leur taille, leur date de création, leur date de modification.
    Ensuite tu pondère chacune de ces données, et si tu estimes que au bout d'un certain nombre de changement, ils sont différents. Bref si les checksums sont diff, la taille identique, et les dates de modif diffs, alors il y a eu modification.
    Mais bon si tu fais le checksum sur chacun des fichier, je pense qu'il y aura moins de différence.
    C'est en effet une des solutions qui pourrais marcher mais si je fais cela je ne respecte pas mon cahier des charges car les archives sont composées de plusieurs milliers de fichiers et la perte de temps est trop grande. Donc je vais approffondir ma recherche pour trouver quel est le problème dans mon algorithme.

  14. #14
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Et si tu avais un service windows qui surveille constemment les répertoires où tu stockes les version différentes, avec la classe dont j'ai oublié le nom, tu pourrais être alerter lors de la modif d'un fichier, l'ajout, et la suppression de fichier.
    Tu saurais en temps réel si c une nouvelle version, et alors tu sauras qu'il faut zipper le repertoire et stocker le zip sur le serveur.

  15. #15
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Le problème n'est peut être pas à ce niveau, mais pourrais-tu préciser l'algo de compression (ou la librairie la cas échéant) que tu utilises ?

    Je crois que certaines méthodes ne garantissent pas que le même fichier en entrée donne systématiquement le même fichier en sortie...

  16. #16
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    Citation Envoyé par Keihilin Voir le message
    Le problème n'est peut être pas à ce niveau, mais pourrais-tu préciser l'algo de compression (ou la librairie la cas échéant) que tu utilises ?

    Je crois que certaines méthodes ne garantissent pas que le même fichier en entrée donne systématiquement le même fichier en sortie...
    En fait sur la première version de la compression j'utilisait SharpZipLib, ce qui marchait pas trop mal et m'offrait un bon taux de compression mais en l'occurence elle ne m'offrait pas la possibilité d'avoir les mèmes fihiers en sortie.
    Je viens d'essayer la librairie System.IO.Compression et Ô miracle ca marche mais mes fichiers zip ne sont pas ouvrables par les archiveurs disponibles sur le marché (gratuit comme payants). De plus le niveau compression est pas top (enfin compression entre 1/4 et 1/5 c'est pas trop mal non plus).

    Donc j'ai réglé mon problème mais il me reste à faire en sorte que mes archives crées soient ouvrables par un logiciel de compression classique car pour ma compression je ne crée pas d'en-tête pour le fichier (en gros je compresse les binaires de mes différents fichiers en un gros binaire tout moche).

    Me reste plus qu'a trouver comment construire un en-tête pour le fichier et ce sera bon.

    Merci à tous pour votre aide. C'est la fête dans les chaumières.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HTML 4.0] 2 fichiers html avec codes identiques mais affichages différents !?
    Par lololebricoleur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 26
    Dernier message: 23/11/2013, 15h19
  2. Repérer deux fichiers identiques mais pas avec les mêmes dates
    Par rambc dans le forum Général Python
    Réponses: 14
    Dernier message: 17/03/2009, 03h13
  3. Extraction d'un fichier zip
    Par dyason dans le forum Général Python
    Réponses: 2
    Dernier message: 13/07/2004, 12h35
  4. [Fichier Zip] Comment zipper un fichier
    Par caro_a dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 27/05/2004, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo