Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ZIP - UNZIP : CLASSES POUR GÉRER VOS ZIPS


Information sur la source

Catégorie :Compression & Split Classé sous : zip, unzip, classe, compression, compresser Niveau : Débutant Date de création : 27/06/2004 Date de mise à jour : 25/01/2008 20:49:30 Vu / téléchargé: 20 959 / 3 844

Note :
9,06 / 10 - par 17 personnes
9,06 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (65)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Les classes originales sont de Mc Millan dont le lien est fourni dans le Zip.
J'ai repris ces classes et je les ai modifiées afin de pouvoir gérer les fichiers Zip plus facilement. J'y ai ajouté aussi des commentaires afin de mieux comprendre le principe.
Les zips fabriqués sont compatibles avec les Zip standards - y compris les accents, voir mise à jour du 12/6/06
Les classes utilisent la librairie ZLib.dll qui est beaucoup plus pratique que les Zip.dll et Unzip.dll
Le fichier ZLib.dll est inclu dans le zip, mais aussi dans la ressource du projet : comme ça, si le fichier disparait, on peut le recréer facilement.

Voyez les applis de démo fournies avec : Leur utilisation est assez simple.
 

Conclusion

J'avais besoin de cet ensemble de gestion de Zip pour compresser un ensemble de fichiers pour sauvegarde.
Ce qu'il manque :
- Gestion de l'ajout de fichier dans un Zip existant
- Gestion de la suppression de fichier dans un Zip existant
tout simplement parce que je n'en avais pas besoin et aussi parce que c'est assez coton à gérer.

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

27 juillet 2004 19:01:50 :
Contrairement à ce que j'expliquais dans la source, le fichier DLL doit se trouver dans un répertoire accessible par le Path, donc par exemple, sous %WIN%\System32 Sinon, l'utilisation de l'option "RelativePath" ne fonctionne pas. Cette version modifiée extrait donc le fichier DLL dans ce dernier répertoire.
27 juillet 2004 19:36:18 :
.
12 juin 2006 04:35:42 :
Ca y est : Après un week-end complet à travailler sur le sujet, les noms des fichiers Zippés sont maintenant compatibles avec les accents ! La vache, pas facile de trouver les infos ... même que je ne les ai pas vraiment trouvées ... En fait, c'est une histoire de page de codes : VB utilise des caractères numérotés en ISO 8859-1 (Latin 1 occidental) Or, les noms des fichiers utilisés sous WinZip par exemple, utilisent l'ASCII étendu. Les caractères accentués ne se trouvent pas au même endroit (code ascii change) Je n'ai pas trouvé l'astuce pour convertir proprement les index de ces caractères, je me suis fait ma propre table de correspondance. D'autant que, et c'est troublant, des fois WinZip utilise le codage ISO quand même. Afin, le principal, c'est que ça fonctionne now.
12 juin 2006 14:35:52 :
Correction : Le chemin complet (avec l'option du même nom) comportait le nom du disque, ce qui est interdit dans la norme des Zip.
18 septembre 2006 01:57:26 :
Fiabilisation conversion Ascii <-> Ansi pour ne plus avoir de problème avec les caractères accentués sous WinZip. (merci EBartSoft)
17 septembre 2007 15:19:25 :
Modif suggérée par PNEAU : Réécriture de la date et heure d'un fichier extrait
17 septembre 2007 15:26:02 :
Pendant que j'y étais, j'a aussi appliqué la modif suggérée de YAN35 à propos de la lecture des fichiers de taille nulle
25 janvier 2008 20:49:31 :
Correction d'une erreur dans la classe clsZip_UnZip, procédure zExtractFile : On faisait référence au LocalFileHeader alors qu'il faut regarder le CentralFileHeader (cas des compression de type 8) Ceci explique surement quelques problèmes signalés.

Commentaires et avis

signaler à un administrateur
Commentaire de EBArtSoft le 27/06/2004 20:44:32 administrateur CS

Une reference a zlib c'est bien,
compiler la zlib avec le projet vb c'est encore mieu ;)

(comming soon...)

@+

signaler à un administrateur
Commentaire de Arknoth le 28/06/2004 12:08:46

Décidément la librairie de compression de Jean-Loup Gailly est de plus en plus populaire. Cette dll est un must (pour info elle est utilisée par la plupart des sociétés de développement de jeux vidéos style Blizzard)

@ pluche

signaler à un administrateur
Commentaire de bubble44 le 01/07/2004 19:40:45

Je me demande si ca saurait decompresser les "GZIP Content-Encoding in HTTP responses"

en gros certaines demandes http, ou le truc retourné est tout compressé.
J'ai jamais trouvé une source en vb.

signaler à un administrateur
Commentaire de jack le 01/07/2004 23:55:37 administrateur CS

Salut bubble44
Regarde bien dans ces classes et tu verras qu'il ne s'agit que de dé/compresser des chaînes de caractères.
Si la méthode de compression de GZip est la même que celle de Zip, tu peux très bien utiliser cette DLL et ces classes pour faire de la dé/compression à la volée.

signaler à un administrateur
Commentaire de EBArtSoft le 02/07/2004 08:32:38 administrateur CS

bubble44&gt; Aller je te prepare un "tutorial" rien que pour toi ;)

signaler à un administrateur
Commentaire de bubble44 le 02/07/2004 10:37:03

D'accord, j'attends de voir alors ...

signaler à un administrateur
Commentaire de jack le 20/08/2004 18:31:25 administrateur CS

Dédé me demande :

Super tes classes, je vais en avoir besoin.
Cependant :
  - est-ce normal que je fichier zip contienne un dossier "C:" ?
  - est-ce que les classes fonctionneront avec des gros fichiers (env 600-700Mo) ?
  - est-ce possible de mettre une barre de progression ?

Merci d'avance
----------------------------------------------------------------------
-1- Comme dit dans les explications, ces classes originales ne sont pas de moi. Voir lien vers les originaux dans le Zip.
-2- Dossier "C:" : Je ne sais pas, de toute façon, ça ne change rien à la décompression
-3- Fonctionne avec des gros fichiers : Personnellement, je compresse 53 Mo, 1200 fichiers textes sans problème. Il va falloir que tu essayes toi même !
-4- Barre de progression : Non, je ne pense pas car le zippage se fait en deux étapes : la collecte des noms de fichiers, puis la compression/création du ZIP. Or pendant cette dernière phase, la DLL ne renvoie pas d'info.

La prochaine fois, évite les messages privés. Merci
Jack

signaler à un administrateur
Commentaire de thierrydelepine le 10/09/2004 18:16:11

Bonjour,

j'utilise ta classe pour visualiser le contenu de fichier ZIp et pour extraire certains fichiers.
Cela fonctionne très bien avec des ZIP dit standard.
Par contre avec des ZIP fait par Java (Sun ne respecte pas le standard ZIp et a priori met les tailles compressés en fin de fichier) ou des JAR cela ne marche pas.
As tu une solution, JACK ?

merci de ta reponse.

signaler à un administrateur
Commentaire de jack le 10/09/2004 18:47:04 administrateur CS

Salut Thierry
Non, désolé, pas de soluce ... je ne suis pas un expert des formats de compression.
----------------------------------------------------------------------------------
Pour info, il y a un bug que je n'ai pas réussi à faire disparaître :
Lorsqu'on ZIP avec cette classe des fichiers et des répertoires comportant des lettres accentuées, le UnZip avec la classe marche parfaitement, par contre, un dézippage avec WinZip par exemple ne restitue pas ces caractères correctement.
Vala

signaler à un administrateur
Commentaire de Danyz le 13/01/2005 08:02:19

Salut Jack, merci pour le travail ;)
ca m'a grandement été utile !

Juste une petite precision pour ceux qui vont prendre ta source , je vien de passer 2 heures a m'arracher les cheveux avec les chemins relatifs (qui marchaient de facon aléatoire).
en fait il suffit de placer un Chdir (App.Path) avant de faire le zip et ca marche impecable. En fait j'utilisais une boite de dialogue et ca changait le repertoire courant...
et aussi si vous voulez zipper plusieurs fois d'affiler penser a rajouter un Set MonZip = Nothing sinon il garde les fichiers du zippage d'avant :)

Sinon il y a une possibilité de rajouter un progressbar ?
j'ai vu ta reponse juste au dessus , mais ca serait pas possible de faire un progressbar basé sur le nombre de fichiers ( genre il renvoit le nombre de fichiers deja zippé a chaque nouveau fichier) c'est sur que si tu zip 200 fichiers de  1Ko et le dernier fait 200 Mo , tu vas resté longtemps sur le 99 % , mais moi j'en aurait l'utilité. (je zip une grosse quantité de fichiers de meme taille)

Merci ;)

signaler à un administrateur
Commentaire de Fanny12 le 20/06/2005 14:32:14

Bonjour,
Merci pour ta source. C'est la seule du site qui marche exactement comme je veux, j'ai juste fait une petite modif pour garder l'arborescence que je veux.
Petit bémol, les fichiers zip générés ne sont pas compatibles avec l'outil Dossiers compressés de Windows XP, il n'affiche rien.

signaler à un administrateur
Commentaire de jack le 23/06/2005 17:49:29 administrateur CS

Merci à tous pour vos messages

Salut Fanny12
Ok pour l'info. Je n'ai pas pu le tester personnellement sous XP

Salut Danyz
Si le fichier ZLib.DLL est stocké et registré sur le répertoire System32, il ne devrait pas y avoir de soucis avec les répertoires relatifs - je me suis cassé la tête aussi un moment pour que ça fonctionne.
Exact pour le 'Set monZip = Nothing' : C'est une règle de programmation de suprimer la déclaration des objets avant de sortir d'une procédure.
En ce qui concerne la ProgressBar : Oui, c'est faisable. Voici les bases (pas le temps de mettre à jour).
- dans la partie déclaration ta classe, ajoute
Public Event Progression(ByVal Pourcentage As Long)
- dans le code de la classe, aux endroits opportuns, calcule le % à renvoyer à la forme d'acceuil et donne lui la valeur :
RaiseEvent Progression(LaValeurCalculée)
- dans la forme d'acceuil, la déclaration de la classe change : Il faut ajouter le WithEvents :
Private WithEvents MonZip  As ZipClass
- Si tu regardes parmi les controles de la forme d'acceuil, tu as maintenant un objet 'MonZip' et un évènement 'Progression' : Cet evènement se déclenchera à chaque fois que tu feras le 'RaiseEvent' dans la classe. Il te suffit de faire un :
maProgressBar.Value = Pourcentage
Pense à ajouter des DoEvent après un RaiseEvent afin que Windows ait le temps d'envoyer les infos

signaler à un administrateur
Commentaire de Fanny12 le 24/06/2005 09:13:06

Salut !
Je me suis rendue compte que c'était aléatoire avec l'outil Dossiers compressés de Windows XP. Il affiche le contenu du fichier zip une fois sur deux.

Voilà

signaler à un administrateur
Commentaire de abdebr le 19/07/2005 02:30:08

Salut,
je travaille actuellement sur un projet pour lequel je vais avoir besoin de zipper d'énormes fichiers.

Ta Dll permet-elle de gérer la création de zip avec une taille max, encre mieux, permet-elle de créer plusieurs zip si la taille des fichiers à compresser est supérieure à un seuil prédéfinit ? le but de cette question est de pouvoir gérer la création de CD documentaires en zippant les fichiers pour gagner da la place.

Par contre, j'aurais une dernière pette question :
est-il possible de visualiser le contenu d'un zip avec la dll et peut-on visualiser un des fichiers "à la volée" sans dézipper ?

merci de ton aide
En attendant, je vais me pencher sur tes sources.

signaler à un administrateur
Commentaire de jack le 19/07/2005 18:00:49 administrateur CS

Salut Abdebr
Non, la source proposée ici ne permet pas de limiter la taille du fichier final, mais en se penchant dessus, c'est surement faisable. Par contre, il s'agira de fichiers ZIP distincts, non chainés.
L'autre possiblité consisterait à crééer le zip complet et de le couper (spliter) en plusieurs fichiers mais qu'il faudra réunir à nouveau pour le dézipper.

Visualiser à la volée : de toute façon, il faut dézipper à un moment donné. Regarde la source, tu peux choisir de ne dézipper qu'un seul des fichiers si tu le désires, de là, facile à afficher ensuite.

Nota : Plutôt que de l'utiliser en DLL, tu peux simplement placer les classes dans ton projet = plus facile à gérer.

signaler à un administrateur
Commentaire de rafanel le 19/09/2005 11:43:54

j'ai utlise ce code pour réaliser on ziper mais voila si on zip un fichier trop grop on a une erreur N°7 Memoire insufisante....
comment résoudre ce pb?
l'erreur vient qu'on cré en ram un tableai bimaire equivalent a la taille du fichier dans le module compressbit. pourrait t'on par faire un fichier temporaire éuivalent a ce tableau. mais voila je ne suis pas une lumière du vb.
Alors si vous avait une solutin je suis prenneur.
merci d'avance.

signaler à un administrateur
Commentaire de philheiz le 13/10/2005 13:35:47

beau boulot jack !
enfin une classe facile à utiliser. Ca m'étonne toujours qu'il n'y ait pas plus de sources utilisables (comme celle-ci) lorsqu'il s'agit de zipper.

signaler à un administrateur
Commentaire de shaiinna le 25/10/2005 11:39:57

ben moi perso ca marche po snoufff

Les commandes zipopen nexiste pas c openzip pi en plus

If not Monzip.OpenZip then Monzip.OpenZip (nomdufichierzip)

Call MonZip.ExtractallFiles ("chemin destination", true, false)

End if

End sub

BEn ca marche pas les valeurs ne sont pas defini pourtant dans la cls elles le sont

i don't understant why ??????? ca marche pas !!!
Bourdel lol
ptite aide?

signaler à un administrateur
Commentaire de jack le 25/10/2005 18:19:26 administrateur CS

Salut Shaiina
Désolé, mais je pense que ces différences viennent du fait que tu n'utilise pas la DLL ZLib fournie avec le projet.
Méfie toi, il existe plusieurs versions de cette DLL et toutes ne fonctionnent pas !
Cette DLL est fournie dans les ressources de l'application "DémoZip".
Alors il te suffit de lancer cette appli pour qu'il place la DLL dans le répertoire %Win%\System32.
Je viens de vérifier, j'ai commis des erreurs que je corrigerai dans les prochains jours :
- Dans le projet "DémoUnZip", j'ai mis le code mais j'ai oublié de mettre la DLL dans un fichier de ressources.
- Dans ce même projet, je teste si la DLL est sur le répertoire de l'application : erreur, il faut la mettre (donc tester sa présence) sous System32
- Pour être bien, il faudrait que le programme teste aussi la version de la DLL pour vérifier la compatibilité.

Je n'est pas tout testé, mais il est possible que cette extraction d'une DLL ne soit pas possible si tu n'es pas Administrateur de ton poste.

signaler à un administrateur
Commentaire de shaiinna le 26/10/2005 09:28:05

justement ah oui bjr tout dabord hihihih jack

La dll je ne peut pas la mettre autre part que sur le systeme justement je n'y ai pas acces enfin les utilisateurs n'auront pas acces au systeme dont lenvoie de ma dll labas ca ne passera pas

Et une question au passage un *.db confirme moi cela n'est jamais en lecture seule? parceque je ne peux pas ecraser mon fichier je peux le delete mais pas le copier.

je sais que ce n'est pas le sujet ici mais j'en profite un peu :p

Bye bye

signaler à un administrateur
Commentaire de jack le 26/10/2005 18:59:45 administrateur CS

Salut
Si tu ne places pas la DLL sous System32, le zippage de données issues d'un autre répertoire / disque que le répertoire courant risque de ne pas fonctionner. A moins de placer ce répertoire dans le Path sous DOS.
Fichier .db : connais pas

signaler à un administrateur
Commentaire de sarl_adc le 31/10/2005 15:47:27

Merci pour ces sources facilement réutilisables et faciles à comprendre :-)

signaler à un administrateur
Commentaire de shaiinna le 31/10/2005 17:20:29

Excusez moi mais comment as tu fait pr compiler ton exe avec ta dll...
Merci pour ta reponse

signaler à un administrateur
Commentaire de Danyz le 31/10/2005 17:50:20

les *.db sont des fichiers systeme de windows (en rapport avec les images, je sais pas trop comment ca marche) : Thumbs.db
On peut les voir en affichant les " Fichiers protégés du systeme d'exploitation", dans les options d'explorer.

++

signaler à un administrateur
Commentaire de shaiinna le 31/10/2005 18:02:46

et pour la compilation de la dll dans lexe comment quon fait

signaler à un administrateur
Commentaire de jack le 31/10/2005 19:23:10 administrateur CS

Danyz : Pour tes fichiers *.db, pose la question sur le forum. Ce n'est pas ici que tu trouveras la réponse.
Shaiinna : La DLL est stockée dans le fichier Ressource du projet.
Pour insérer des fichiers (quelconque) dans un fichier ressource, il suffit d'utiliser le gestionnaire de Ressouce = petite icone verte de cubes imbriqués. Si tu ne le vois pas dans ta barre de VB6, vas l'activer dans le menu Option, Gestionnaire de compléments.
Pour extraire un fichier de la ressouce, ... il suffit de lire le programme.
Le fichier ressource se trouve compilé avec l'EXE, donc facile à transporter.

signaler à un administrateur
Commentaire de Danyz le 31/10/2005 19:24:53

"Et une question au passage un *.db confirme moi cela n'est jamais en lecture seule? parceque je ne peux pas ecraser mon fichier je peux le delete mais pas le copier."

"Fichier .db : connais pas"

c'etait juste pour info....

signaler à un administrateur
Commentaire de Danyz le 31/10/2005 19:28:27

lol t'as du editer ton message entre temps...

ps : c pas moi qui pose la question :)

signaler à un administrateur
Commentaire de rafanel le 02/11/2005 08:06:36

j'ai utlisé ce code, mais voila si on zip un fichier trop gros on a une erreur N°7 Memoire insufisante....
comment résoudre ce pb?
merci par avance.

signaler à un administrateur
Commentaire de shaiinna le 02/11/2005 09:27:34

Coucou tout le monde coucou jack comment va aujourd'hui

Dis moi j'ai tenté de rajouter donc ma dll comme tu me l'as indiqué complement ect

Cependant quand je tente de le lancer sans la dll sur la clé usb ca marche toujours pas

Aurais tu une idée du pourquoi du comment

Thanks everybody

signaler à un administrateur
Commentaire de jack le 02/11/2005 18:05:35 administrateur CS

Salut Shaiinna
Clé USB ? Là, tu cherches les emmerdes, avec une app VB6.
"Ca marche pas" ne veut rien dire.
Si tu as un code de défaut, ou si le programme s'arrête sur une instruction, dis-le, on n'est pas devin.
Je l'ai déjà dis et je répète : ne place pas la DLL sur le répertoire courant mais sous %Win%\System32
Pour extraire la DLL, c'est dans le projet démo du ZIP.

signaler à un administrateur
Commentaire de shaiinna le 02/11/2005 18:18:09

Bonsoir jack

Ne t'enerve pas oulaaa

moi aussi je l'ai deja di je n'ai pas acces de par mes instructions a sys32 sinon tu penses bien que je l'aurais fait.

Mais je ne peux pas.


Donc vala vala

excuse moi du ca marche pas je comprends

Ciao

signaler à un administrateur
Commentaire de Jomba le 05/04/2006 09:59:09

C'est génial, j'ai pu l'intégrer à mon appli sans aucun problème. le code est super bien expliqué tout au long de la prcédure, ce qui permet desavoir exactement ce qui se passe et supprimer ce dont on a pas besoin.
ça mérite une super bonne note.

Jomba

signaler à un administrateur
Commentaire de jack le 06/04/2006 20:45:12 administrateur CS

Salut Jomba
Désolé, ton commentaire à disparu (fausse manip de ma part)
Tu disais avoir une erreur 52 "Nom ou numéro de fichier incorrect" lorsque tu tentes de zipper un fichier MDB en cours d'utilisation.

Bizarre. Au pire, tu aurais eu une erreur 70 "permission refusée", j'aurai compris, mais 52, je ne comprends pas.
Il faudrait debuger ton appli :
Menu Outils, Options, onglet Général : "Arrêt sur toutes les erreurs"
Quand le programme s'arrête sur cette erreur, il faudrait regarder :
- quelle est la ligne sur laquelle apparait l'erreur
- Si un nom de fichier en fait partie, regarder le nom du fichier (dans la fenêtre debug, tape :
? NomDeLaVariable
... et vérifie que ce fichier existe bien.

Je pense en fait que la liste des fichiers est préparée et le zippage a lieu quelques secondes plus tard ... et le fichier a disparu.
S'il s'agit du fichier "maDB.ldb", c'est fort possible.
A toi de filtrer les noms de fichier au moment de la préparation de la liste.

signaler à un administrateur
Commentaire de Jomba le 07/04/2006 08:55:17

Justement, je filtre les noms afin de ne pas prendre le .ldb.
Au moment où on met le fichier à compresser dans l'objet ZipClass, y a pas de probleme et c'est au moment où l'on tente de le compresser pour créer le zip que l'erreur se produit.
ça donne l'impression que le changement de la taille du fichier .mdb change aussi la façon dont il est localisé et que c'est pour ça que l'erreur est "Nom ou numéro de fichier incorrect".
et ça ne vient pas de mon appli puisque j'ai testé avec ce que tu as fait, je n'ai rien changé d'autre que les fichiers à compresser. à part cette erreur qui est difficile à prévoir, tout le reste fonctionne impecablement et est très facile à intégrer à sa propre appli.
je te dis bravo et merci pour ton aide.

Jomba

signaler à un administrateur
Commentaire de jack le 07/04/2006 19:04:40 administrateur CS

Idée en passant : Fais une copie du fichier et compresse la copie qui ne changera pas entre temps.

signaler à un administrateur
Commentaire de robek le 31/05/2006 10:59:15

Merci pour cette source !
Par contre, j'ai l'impression qu'il ne gère pas les noms de fichiers avec accents.

signaler à un administrateur
Commentaire de jack le 31/05/2006 19:11:07 administrateur CS

En effet, les noms de fichiers et de répertoires avec accents sont mal reconnus par un dézippeur commercial genre WinZip.
Par contre, il n'y a pas de problème si tu dézippes aussi avec cette classe.
Je n'ai pas eu le temps d'approfondir le problème. Surement une histoire d'unicode.

signaler à un administrateur
Commentaire de robek le 01/06/2006 10:55:40

J'ai essayé de dézipper ta source et le fichier "Démo_Zip.vbp" devient "D‚mo_Zip.vbp"
Je vois pas d'ou ça peut venir.

signaler à un administrateur
Commentaire de jack le 01/06/2006 17:46:09 administrateur CS

... Quel dézippeur utilises-tu ?
Personnellement, j'utilise le freeware AlZip sans aucun problème.
Si tu parles de dézipper ce fichier Zip de la source avec ma classe, je n'ai pas essayé.
Il est possible qu'il ne reconnaisse pas les accents (comme dit plus haut).
Par contre, si tu 'zip' avec la classe et que tu 'dézip' aussi avec la classe, tout fonctionne.

signaler à un administrateur
Commentaire de jack le 12/06/2006 04:36:39 administrateur CS

12/6/06 @@@@@@@@@@@@@@ Mise à jour classes (accents) @@@@@@@@@@@@@@@@@@@@

signaler à un administrateur
Commentaire de yan35 le 12/06/2006 20:04:36

Merci pour cette classe très interessante et que je vais utiliser. Je éventuellement y faire quelques modif et je les renverrai. Merci pour la documentation et le travail que ça représente.

signaler à un administrateur
Commentaire de yan35 le 13/06/2006 14:59:36

Bonjour,
Dans ta dernière version de cette classe, tu as supprimé la possibilité de stocker le disque du chemin des fichiers à zipper. Cependant l'enregistrement du nom du disque serait interessant, pour moi, lorsqu'il est formaté en UNC. Je vois que tu as modifié le paramètre : GeneralPurposeBitFlag de 2 à 0. Est-ce celui qu'il faut mettre à jour pour gérer ou pas les chemins complets ? Si oui 2 et 0 correspondent à quoi ?
Encore Merci pour ton code.

signaler à un administrateur
Commentaire de jack le 13/06/2006 23:28:24 administrateur CS

Salut
Non, le 2 en 0 est un simple flag. Je l'ai repassé à 0 comme le fait WinZip. Je n'ai plus en t^te ce qu'il représente, mais c'est anodin.
Oui, quand je parle de disque, j'ai supprimé le nom du disque local, celui qui commence par le traditionnel C:.
Donc les appellations UNC ne sont pas concernées (à tord, je pense)

signaler à un administrateur
Commentaire de yan35 le 14/06/2006 23:49:02

Bonsoir,

Il m'est arrivé un bugg tout bête dans CompressBytes.
Dans 1 liste de fichiers *.htm à comprimer, j'avais 1 fichier de taille 0 octet.
Oui, c'est rare, quasiment introuvable et c'est pas la peine de le comprimer, mais ça peut arriver dans des répertoires en récursif ! (ici documents ans settings\ ....\application Data\ ...\0000015.htm sans doute un fichier test !...) Peu importe, il y a plantage au niveau du Redim, forcément :
...
    fh = FreeFile
    Open FilePath For Binary As #fh
    FileSize = LOF(fh)
    
    ReDim FileData(FileSize - 1)
    Get #fh, , FileData
    Close #fh
...

J'y ai donc ajouté :
    Open FilePath For Binary As #fh
    FileSize = LOF(fh)
    
    If FileSize > 0 Then
        ReDim FileData(FileSize - 1)
    Else
        ReDim FileData(0)
    End If
    
    Get #fh, , FileData
    Close #fh

Cordialement.

signaler à un administrateur
Commentaire de jack le 15/06/2006 19:10:40 administrateur CS

Salut Yan35
Merci de cette info.
Ok pour ta solution.
Reste à tester ce qui se passe lors du dézippage ... (pas eut le temps de tester)

signaler à un administrateur
Commentaire de jack le 18/09/2006 02:04:19 administrateur CS

@@@@@@@ Remise à jour conversion Ascii <> Ansi, plus fiable @@@@@@@
(merci EBartSoft)
Les fichiers Zip peuvent contenir des fichiers/répertoires avec accents, compatible WinZip.

signaler à un administrateur
Commentaire de rafanel le 05/10/2006 11:15:53

salut jack

je viens utilisé ton exemple pour comprendre comment fonctionne la Zlib.dll
tout fonctionne trés bien, sauf si dans la liste des fichier il y a un fichier plus de 600 Mo il y a une erreur dans la fonction CompressBytes.
pourquoi ? ou alors comment courtourner le pb.
merci par avance
TR

signaler à un administrateur
Commentaire de kerriencpp le 13/10/2006 14:17:40

Bonjour,
Il semblerait que la correction proposée par Yan35 ne fonctionne pas, si on utilise winrar pour dézipper, les fichiers de taille 0 octet ne peut pas être décompressés car ils sont corrompus.

J'ai écris ceci à la place et je n'ai pas d'erreur pour dézipper à partir de winrar :

Private Sub CompressBytes(ByVal vsFilePath As String, ...
...
Open vsFilePath For Binary As #llfh
llFileSize = LOF(llfh)
If llFileSize = 0 Then
  Close #llfh
  Exit Sub
Else
  ReDim FileData(llFileSize - 1)
End If
Get #llfh, , FileData
Close #llfh
...

Par contre il y a toujour un problème pour décompresser les fichiers de taille 0 octet à partir de la classe "clsZip_UnZip.cls". Je vais essayer de creuser un peu plus la question.
Cordialement.

signaler à un administrateur
Commentaire de ghuysmans99 le 07/11/2006 21:34:57

ca marche du tonnerre !

signaler à un administrateur
Commentaire de yan35 le 19/11/2006 20:38:00

Jack, je me suis permis d'implémenter tes classes que je trouvais Super, mais je préférais n'avoir qu'une classe à intégrer dans un projet et je voulais aussi pouvoir gérer des zip de grande taille.
Ceci m'a conduit à changer un peu le concept de ta source.
Voici le lien de ma classe qui part des tiennes, ta dernière version diffusée à ce jour intégrée.
http://www.vbfrance.com/code.aspx?ID=40387
Merci de ton avis.

signaler à un administrateur
Commentaire de jack le 19/11/2006 21:11:18 administrateur CS

Très bonne initiative, Yan
Merci pour tout le monde

signaler à un administrateur
Commentaire de EBArtSoft le 19/11/2006 21:14:30 administrateur CS