cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 2019
-
27 juin 2004 à 20:44
jzancle
Messages postés1Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention31 août 2010
-
31 août 2010 à 11:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
jzancle
Messages postés1Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention31 août 2010 31 août 2010 à 11:22
Bonjour,
Pour la décompression d'un fichier avec 0 octet ou d'un fichier déjà zipper la décompression ne fonctionne pas !!
Pour celà il faut mettre la variable niveau de compression à 0
voici la correction que j'ai apporté au source:
dans la function FileAddSingle:
Select Case cZipError
Case 0, 7 ' c'est OK on complète les données au tableau
With tabFiles(cptTab)
.commun = varCommunZF
'---------------------------------------
'Modification apportée le 11/08/2010
'---------------------------------------
If (varCommunZF.UncompressedSize 0) Or (InStrRev(UCase(sFileName), ".ZIP", , vbBinaryCompare) > 0) Then .commun.CompressionMethod 0
ma problématique etait simple: me faut générer en mémoire le contenu d'un zip, ne contenant qu'un seul fichier.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 27 avril 2009 à 20:01
Pas fait gaffe à ce "détail".
Faudrait regarder en mode debug ce qu'on trouve lorsqu'il s'occupe de la structure vide.
Désolé, pas le temps d'approfondir.
gmni
Messages postés91Date d'inscriptionmercredi 6 novembre 2002StatutMembreDernière intervention20 mars 2009 27 avril 2009 à 16:54
Excellente source, sauf quand on dezip une source déjà compréssée (par 7z par ex) les dossiers vides ne sont pas reconnus.
Ya t'il qq part un paramètre à modifier ou rajouter ??
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 janv. 2008 à 08:25
Bonne question.
Je n'ai pas la connaissance pour te répondre.
Cette source ne fait que reproduire le format d'un fichier ZIP, mais je ne me rappelle pas avoir vu de description de cette option dans la structure originelle.
Je regarderai quand j'aurai 5 minutes (pas tout de suite)
cs_slayer
Messages postés202Date d'inscriptiondimanche 1 septembre 2002StatutMembreDernière intervention18 mars 2008 9 janv. 2008 à 01:02
cool , cette source , good joob .
juste une petit question , comment mettre un mot de passe au zip ?
ZedMaTrix
Messages postés178Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention14 août 2008 10 oct. 2007 à 09:11
OK merci Jack ! ;)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 oct. 2007 à 18:01
Je vais m'avancé, mai je ne pense pas qu'il faille tout décompresser, non.
La structure d'un fichier Zip est propre :
- Des entêtes de caractéristiques dans laquelle on retrouve les infos des fichiers qu'il contient et notamment la taille compressée.
- Une fois qu'on a la taille de cette zône de données compressées, je pense qu'il est simple de se placer derrière pour en ajouter d'autres, ce n'est qu'un jeu de déplacement (Seek) dans les données du fichier.
Je verrais ça en détail quand je ferai la mise à jour
ZedMaTrix
Messages postés178Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention14 août 2008 9 oct. 2007 à 10:08
Merci à toi JACK !
Mais je trouve énorme ce fonctionnement... ( J'ai fait des recherches, et effectivement, il faut tout extraire pour tout re-compresser. J'ai même fais des tests... )
C'est quand même dingue que le système soit tellement pourris...
Y a pas un autre format que zip qui lui soit mieux construit, et donc permet l'ajout de fichier sans tout ressortir de l'archive ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 8 oct. 2007 à 21:53
Promis, si j'ai du temps, je ferai une mise ç jour avec cette fonctionnalité, mais ne soit pas pressé (pas avant fin novembre sauf miracle).
Je te tiens au courant.
ZedMaTrix
Messages postés178Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention14 août 2008 8 oct. 2007 à 11:20
Tu croix que c'est comme ca que ca marche ?
Il décompresse tout, et re-compresse avec le(s) nouveau(x) fichier(s) ?
Ça me parait bisard, mais bon, d'un autre coté, je n'y connais rien en compression coté dev.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 oct. 2007 à 19:25
Salut
Oui, surement Zed, il n'y a rien qui l'empèche.
-1- Réunir dans un même projet les deux projets présents ici.
-2- Ouvrir le zip existant avec la classe UnZip qui relit d'abord la structure du fichier.
-3- Il doit suffire ensuite d'appliquer les méthodes Zip.
Je n'ai hélas pas le temps d'essayer (et je n'ai pas eu besoin de cette fonctionnalité), mais le code est bien commenté, plonge toi dedans.
ZedMaTrix
Messages postés178Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention14 août 2008 5 oct. 2007 à 14:38
Hello,
Je vient d'étudier ta source, et sa marche bien.
Seule truc. Il n'est pas possible de faire rajouter à un zip existant des fichiers ?
Merci pour le super taff ! :)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 17 sept. 2007 à 14:31
Pas mal, merci.
C'est vrai que je n'avais pas fait attention à ce détail.
Et pour compléter, il faut appeler zSave avec les compléments d'info Heure et Date contenues dans CentralFileHeader.
Je mets à jour la source avec ta modif.
Merci d'avoir partagé.
pneau
Messages postés258Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention27 octobre 20105 17 sept. 2007 à 10:31
Salut à tous,
Lors de la décompression des fichiers, la date du fichier d'origine était perdue... ce qui me posait quelques soucis. J'ai donc modifié la classe pour réécrire la date dans le fichier décompressé.
Le code suivant a été ajouté...
Private Sub zSaveFile(ByVal Path As String, _
ByRef Data() As Byte, lLastDate As Integer, lLastTime As Integer)
Dim FFileDateTime As FILETIME
Dim hFile As Long
Dim retval As Long
Dim lfh As Long
DosDateTimeToFileTime CLng(lLastDate), CLng(lLastTime), FFileDateTime
' Sauvegarde les données dans le fichier
lfh = FreeFile
Open Path For Binary As #lfh
Put #lfh, , Data
Close #lfh
hFile = CreateFile(Path, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ, ByVal CLng(0), OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
If hFile <> -1 Then
retval = SetFileTime(hFile, FFileDateTime, FFileDateTime, FFileDateTime)
retval = CloseHandle(hFile)
End If
End Sub
sur ce ...
@+
Tchô
cs_ankou22
Messages postés81Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 7 juin 2012 16 avril 2007 à 11:07
Bonjour,
J'ai le même problème que RAFANEL, lorsque je veux zipper un fichier de plus de 1Go, j'obtient une erreur "mémoire insuffisante" dans la proc CompressBytes(), au niveau de la ligne
ReDim FileData(FileSize - 1),
Si vous avez une idée, merci d'avance...
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 19 nov. 2006 à 21:14
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 19 nov. 2006 à 21:11
Très bonne initiative, Yan
Merci pour tout le monde
yan35
Messages postés185Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention20 juin 2013 19 nov. 2006 à 20:38
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.
ghuysmans99
Messages postés2496Date d'inscriptionjeudi 14 juillet 2005StatutContributeurDernière intervention 5 juin 20161 7 nov. 2006 à 21:34
ca marche du tonnerre !
kerriencpp
Messages postés3Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention29 mars 2006 13 oct. 2006 à 14:17
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.
cs_rafanel
Messages postés21Date d'inscriptionlundi 17 mars 2003StatutMembreDernière intervention 8 mars 2012 5 oct. 2006 à 11:15
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 18 sept. 2006 à 02:04
@@@@@@@ Remise à jour conversion Ascii <> Ansi, plus fiable @@@@@@@
(merci EBartSoft)
Les fichiers Zip peuvent contenir des fichiers/répertoires avec accents, compatible WinZip.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 15 juin 2006 à 19:10
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)
yan35
Messages postés185Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention20 juin 2013 14 juin 2006 à 23:49
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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 juin 2006 à 23:28
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)
yan35
Messages postés185Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention20 juin 2013 13 juin 2006 à 14:59
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.
yan35
Messages postés185Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention20 juin 2013 12 juin 2006 à 20:04
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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 juin 2006 à 04:36
12/6/06 @@@@@@@@@@@@@@ Mise à jour classes (accents) @@@@@@@@@@@@@@@@@@@@
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 1 juin 2006 à 17:46
... 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.
robek
Messages postés4Date d'inscriptionmardi 27 janvier 2004StatutMembreDernière intervention 1 juin 2006 1 juin 2006 à 10:55
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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 31 mai 2006 à 19:11
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.
robek
Messages postés4Date d'inscriptionmardi 27 janvier 2004StatutMembreDernière intervention 1 juin 2006 31 mai 2006 à 10:59
Merci pour cette source !
Par contre, j'ai l'impression qu'il ne gère pas les noms de fichiers avec accents.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 avril 2006 à 19:04
Idée en passant : Fais une copie du fichier et compresse la copie qui ne changera pas entre temps.
Jomba
Messages postés58Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention22 juillet 2010 7 avril 2006 à 08:55
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 avril 2006 à 20:45
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.
Jomba
Messages postés58Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention22 juillet 2010 5 avril 2006 à 09:59
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
shaiinna
Messages postés32Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention 2 novembre 2005 2 nov. 2005 à 18:18
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 2 nov. 2005 à 18:05
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.
shaiinna
Messages postés32Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention 2 novembre 2005 2 nov. 2005 à 09:27
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
cs_rafanel
Messages postés21Date d'inscriptionlundi 17 mars 2003StatutMembreDernière intervention 8 mars 2012 2 nov. 2005 à 08:06
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.
cs_Danyz
Messages postés98Date d'inscriptiondimanche 20 juillet 2003StatutMembreDernière intervention31 octobre 2006 31 oct. 2005 à 19:28
lol t'as du editer ton message entre temps...
ps : c pas moi qui pose la question :)
cs_Danyz
Messages postés98Date d'inscriptiondimanche 20 juillet 2003StatutMembreDernière intervention31 octobre 2006 31 oct. 2005 à 19:24
"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....
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 31 oct. 2005 à 19:23
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.
shaiinna
Messages postés32Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention 2 novembre 2005 31 oct. 2005 à 18:02
et pour la compilation de la dll dans lexe comment quon fait
cs_Danyz
Messages postés98Date d'inscriptiondimanche 20 juillet 2003StatutMembreDernière intervention31 octobre 2006 31 oct. 2005 à 17:50
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.
++
shaiinna
Messages postés32Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention 2 novembre 2005 31 oct. 2005 à 17:20
Excusez moi mais comment as tu fait pr compiler ton exe avec ta dll...
Merci pour ta reponse
sarl_adc
Messages postés141Date d'inscriptionlundi 3 novembre 2003StatutMembreDernière intervention20 octobre 2005 31 oct. 2005 à 15:47
Merci pour ces sources facilement réutilisables et faciles à comprendre :-)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 26 oct. 2005 à 18:59
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
shaiinna
Messages postés32Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention 2 novembre 2005 26 oct. 2005 à 09:28
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 25 oct. 2005 à 18:19
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.
shaiinna
Messages postés32Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention 2 novembre 2005 25 oct. 2005 à 11:39
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)
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?
philheiz
Messages postés117Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention11 octobre 20071 13 oct. 2005 à 13:35
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.
cs_rafanel
Messages postés21Date d'inscriptionlundi 17 mars 2003StatutMembreDernière intervention 8 mars 2012 19 sept. 2005 à 11:43
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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 19 juil. 2005 à 18:00
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.
abdebr
Messages postés8Date d'inscriptionsamedi 20 novembre 2004StatutMembreDernière intervention19 juillet 2005 19 juil. 2005 à 02:30
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.
cs_Fanny12
Messages postés3Date d'inscriptionvendredi 28 mars 2003StatutMembreDernière intervention24 juin 2005 24 juin 2005 à 09:13
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à
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 juin 2005 à 17:49
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
cs_Fanny12
Messages postés3Date d'inscriptionvendredi 28 mars 2003StatutMembreDernière intervention24 juin 2005 20 juin 2005 à 14:32
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.
cs_Danyz
Messages postés98Date d'inscriptiondimanche 20 juillet 2003StatutMembreDernière intervention31 octobre 2006 13 janv. 2005 à 08:02
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 ;)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 10 sept. 2004 à 18:47
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
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 10 sept. 2004 à 18:16
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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 20 août 2004 à 18:31
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
bubble44
Messages postés200Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention 3 août 2004 2 juil. 2004 à 10:37
D'accord, j'attends de voir alors ...
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 2 juil. 2004 à 08:32
bubble44> Aller je te prepare un "tutorial" rien que pour toi ;)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 1 juil. 2004 à 23:55
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.
bubble44
Messages postés200Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention 3 août 2004 1 juil. 2004 à 19:40
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.
cs_Arknoth
Messages postés96Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention22 août 2004 28 juin 2004 à 12:08
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
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 27 juin 2004 à 20:44
Une reference a zlib c'est bien,
compiler la zlib avec le projet vb c'est encore mieu ;)
31 août 2010 à 11:22
Pour la décompression d'un fichier avec 0 octet ou d'un fichier déjà zipper la décompression ne fonctionne pas !!
Pour celà il faut mettre la variable niveau de compression à 0
voici la correction que j'ai apporté au source:
dans la function FileAddSingle:
Select Case cZipError
Case 0, 7 ' c'est OK on complète les données au tableau
With tabFiles(cptTab)
.commun = varCommunZF
'---------------------------------------
'Modification apportée le 11/08/2010
'---------------------------------------
If (varCommunZF.UncompressedSize 0) Or (InStrRev(UCase(sFileName), ".ZIP", , vbBinaryCompare) > 0) Then .commun.CompressionMethod 0
.localFileHeaderZF = LocalFileHeader
.centralFileHeaderZFA = CentralFileHeaderA
.centralFileHeaderZFC = CentralFileHeaderC
etc.....
22 sept. 2009 à 13:24
je l'ai déplumé totalement, viré les structures etc.
http://www.vbfrance.com/codes/SABNZBD-UPLOAD-FICHIERS-NZB_50575.aspx
ma problématique etait simple: me faut générer en mémoire le contenu d'un zip, ne contenant qu'un seul fichier.
27 avril 2009 à 20:01
Faudrait regarder en mode debug ce qu'on trouve lorsqu'il s'occupe de la structure vide.
Désolé, pas le temps d'approfondir.
27 avril 2009 à 16:54
Ya t'il qq part un paramètre à modifier ou rajouter ??
9 janv. 2008 à 08:25
Je n'ai pas la connaissance pour te répondre.
Cette source ne fait que reproduire le format d'un fichier ZIP, mais je ne me rappelle pas avoir vu de description de cette option dans la structure originelle.
Je regarderai quand j'aurai 5 minutes (pas tout de suite)
9 janv. 2008 à 01:02
juste une petit question , comment mettre un mot de passe au zip ?
10 oct. 2007 à 09:11
9 oct. 2007 à 18:01
La structure d'un fichier Zip est propre :
- Des entêtes de caractéristiques dans laquelle on retrouve les infos des fichiers qu'il contient et notamment la taille compressée.
- Une fois qu'on a la taille de cette zône de données compressées, je pense qu'il est simple de se placer derrière pour en ajouter d'autres, ce n'est qu'un jeu de déplacement (Seek) dans les données du fichier.
Je verrais ça en détail quand je ferai la mise à jour
9 oct. 2007 à 10:08
Mais je trouve énorme ce fonctionnement... ( J'ai fait des recherches, et effectivement, il faut tout extraire pour tout re-compresser. J'ai même fais des tests... )
C'est quand même dingue que le système soit tellement pourris...
Y a pas un autre format que zip qui lui soit mieux construit, et donc permet l'ajout de fichier sans tout ressortir de l'archive ?
8 oct. 2007 à 21:53
Je te tiens au courant.
8 oct. 2007 à 11:20
Il décompresse tout, et re-compresse avec le(s) nouveau(x) fichier(s) ?
Ça me parait bisard, mais bon, d'un autre coté, je n'y connais rien en compression coté dev.
5 oct. 2007 à 19:25
Oui, surement Zed, il n'y a rien qui l'empèche.
-1- Réunir dans un même projet les deux projets présents ici.
-2- Ouvrir le zip existant avec la classe UnZip qui relit d'abord la structure du fichier.
-3- Il doit suffire ensuite d'appliquer les méthodes Zip.
Je n'ai hélas pas le temps d'essayer (et je n'ai pas eu besoin de cette fonctionnalité), mais le code est bien commenté, plonge toi dedans.
5 oct. 2007 à 14:38
Je vient d'étudier ta source, et sa marche bien.
Seule truc. Il n'est pas possible de faire rajouter à un zip existant des fichiers ?
Merci pour le super taff ! :)
17 sept. 2007 à 14:31
C'est vrai que je n'avais pas fait attention à ce détail.
Et pour compléter, il faut appeler zSave avec les compléments d'info Heure et Date contenues dans CentralFileHeader.
Je mets à jour la source avec ta modif.
Merci d'avoir partagé.
17 sept. 2007 à 10:31
Lors de la décompression des fichiers, la date du fichier d'origine était perdue... ce qui me posait quelques soucis. J'ai donc modifié la classe pour réécrire la date dans le fichier décompressé.
Le code suivant a été ajouté...
Private Sub zSaveFile(ByVal Path As String, _
ByRef Data() As Byte, lLastDate As Integer, lLastTime As Integer)
Dim FFileDateTime As FILETIME
Dim hFile As Long
Dim retval As Long
Dim lfh As Long
DosDateTimeToFileTime CLng(lLastDate), CLng(lLastTime), FFileDateTime
' Sauvegarde les données dans le fichier
lfh = FreeFile
Open Path For Binary As #lfh
Put #lfh, , Data
Close #lfh
hFile = CreateFile(Path, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ, ByVal CLng(0), OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
If hFile <> -1 Then
retval = SetFileTime(hFile, FFileDateTime, FFileDateTime, FFileDateTime)
retval = CloseHandle(hFile)
End If
End Sub
sur ce ...
@+
Tchô
16 avril 2007 à 11:07
J'ai le même problème que RAFANEL, lorsque je veux zipper un fichier de plus de 1Go, j'obtient une erreur "mémoire insuffisante" dans la proc CompressBytes(), au niveau de la ligne
ReDim FileData(FileSize - 1),
Si vous avez une idée, merci d'avance...
19 nov. 2006 à 21:14
Remplace aisement compress/decompress
@+
19 nov. 2006 à 21:11
Merci pour tout le monde
19 nov. 2006 à 20:38
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.
7 nov. 2006 à 21:34
13 oct. 2006 à 14:17
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.
5 oct. 2006 à 11:15
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
18 sept. 2006 à 02:04
(merci EBartSoft)
Les fichiers Zip peuvent contenir des fichiers/répertoires avec accents, compatible WinZip.
15 juin 2006 à 19:10
Merci de cette info.
Ok pour ta solution.
Reste à tester ce qui se passe lors du dézippage ... (pas eut le temps de tester)
14 juin 2006 à 23:49
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.
13 juin 2006 à 23:28
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)
13 juin 2006 à 14:59
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.
12 juin 2006 à 20:04
12 juin 2006 à 04:36
1 juin 2006 à 17:46
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.
1 juin 2006 à 10:55
Je vois pas d'ou ça peut venir.
31 mai 2006 à 19:11
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.
31 mai 2006 à 10:59
Par contre, j'ai l'impression qu'il ne gère pas les noms de fichiers avec accents.
7 avril 2006 à 19:04
7 avril 2006 à 08:55
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
6 avril 2006 à 20:45
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.
5 avril 2006 à 09:59
ça mérite une super bonne note.
Jomba
2 nov. 2005 à 18:18
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
2 nov. 2005 à 18:05
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.
2 nov. 2005 à 09:27
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
2 nov. 2005 à 08:06
comment résoudre ce pb?
merci par avance.
31 oct. 2005 à 19:28
ps : c pas moi qui pose la question :)
31 oct. 2005 à 19:24
"Fichier .db : connais pas"
c'etait juste pour info....
31 oct. 2005 à 19:23
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.
31 oct. 2005 à 18:02
31 oct. 2005 à 17:50
On peut les voir en affichant les " Fichiers protégés du systeme d'exploitation", dans les options d'explorer.
++
31 oct. 2005 à 17:20
Merci pour ta reponse
31 oct. 2005 à 15:47
26 oct. 2005 à 18:59
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
26 oct. 2005 à 09:28
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
25 oct. 2005 à 18:19
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.
25 oct. 2005 à 11:39
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?
13 oct. 2005 à 13:35
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.
19 sept. 2005 à 11:43
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.
19 juil. 2005 à 18:00
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.
19 juil. 2005 à 02:30
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.
24 juin 2005 à 09:13
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à
23 juin 2005 à 17:49
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
20 juin 2005 à 14:32
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.
13 janv. 2005 à 08:02
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 ;)
10 sept. 2004 à 18:47
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
10 sept. 2004 à 18:16
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.
20 août 2004 à 18:31
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
2 juil. 2004 à 10:37
2 juil. 2004 à 08:32
1 juil. 2004 à 23:55
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.
1 juil. 2004 à 19:40
en gros certaines demandes http, ou le truc retourné est tout compressé.
J'ai jamais trouvé une source en vb.
28 juin 2004 à 12:08
@ pluche
27 juin 2004 à 20:44
compiler la zlib avec le projet vb c'est encore mieu ;)
(comming soon...)
@+