Page 1 sur 1
[Résolu] CreatePack(NomFichier$)
Publié : ven. 07/janv./2011 13:29
par SPH
Salut,
Je veux zipper 5 jpg dans un ZIP mais ce code ne fonctionne pas. Il me paraissait plutot logique...
J'y tiens hein, les jpg sont bien sur diskdur :
Code : Tout sélectionner
NomFichier$="d:/5pics.zip"
CreatePack(NomFichier$)
OpenPack(NomFichier$)
For i=1 To 5
AddPackFile("d:/"+Str(i)+".jpg")
Next
ClosePack()
Re: CreatePack(NomFichier$)
Publié : ven. 07/janv./2011 13:57
par brossden
Bonjour SPH
"OpenPack(NomFichier$)" est de trop !!
Code : Tout sélectionner
NomFichier$="d:/5pics.zip"
CreatePack(NomFichier$)
;OpenPack(NomFichier$)
For i=1 To 5
AddPackFile("d:/"+Str(i)+".jpg")
Next
ClosePack()
Re: CreatePack(NomFichier$)
Publié : ven. 07/janv./2011 14:40
par Guimauve
Bonjour à tous,
Un vieux code créé par Denis pour créer des archives compressés.
Code : Tout sélectionner
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure.l Compression(NomFichier$, MsgOpenFile$, TypeFichier$, FiltreFichier$, TitreErreur$, MsgError$, TauxCompression.b)
If CreatePack(NomFichier$) <> 0 ; crée le le fichier qui va être compressé
Resultat = 1
packers$ = OpenFileRequester(MsgOpenFile$, TypeFichier$, FiltreFichier$, 0, #PB_Requester_MultiSelection)
If packers$ <> "" ; teste si la chaine existe
Repeat
Fichier$ = GetFilePart(packers$) ; récupère seulement le nom de fichier
AddPackMemory( @Fichier$, Len(Fichier$) + 1) ; ajoute le nom de fichier, la zone mémoire étant la chaine Fichier$
; on ajoute 1 à len(Fichier$) pour écrire le 0 qui est le caractère de fin de chaine
AddPackFile(packers$, TauxCompression) ; rajoute la selection et niveau de compression
packers$ = NextSelectedFileName() ; ajoute le fichier compressé
Until packers$ = "" ; on reboucle tant qu'il y a des fichiers compressés
ClosePack() ; ferme le pack
Else
MessageRequester(TitreErreur$, MsgError$, #MB_ICONERROR)
Resultat = 0
EndIf
Else
Resultat = 0
EndIf
ProcedureReturn Resultat
EndProcedure
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure.l Decompression(FichierCompresser$, TitrePathRequester$, InitialPath$, Repertoire$, TitreErreur$, MsgError$)
If OpenPack(FichierCompresser$) <> 0
Resultat = 1
If Repertoire$ = ""
Repertoire$ = PathRequester(TitrePathRequester$, InitialPath$)
EndIf
NomFichier$ = Space(256) ; crée la variable chaine qui récupèrera le nom de fichier courant
AdresseMemoire = NextPackFile() ; On récupère le premier élément compressé, c'est-à-dire le nom du fichier
While AdresseMemoire ; on débute la boucle
NomFichier$ = PeekS(AdresseMemoire) ; récupère le nom de fichier en situé en mémoire
AdresseMemoire = NextPackFile() ; récupère l'adresse du fichier à décompresser
Taille = PackFileSize() ; récupère la taille du fichier à décompresser
CreateFile(0, Repertoire$ + NomFichier$) ; on crée le fichier sur le disque avec le répertoire sélectionné
WriteData(0, AdresseMemoire, Taille) ; on écrit le contenu du fichier
CloseFile(0) ; on ferme le fichier
AdresseMemoire = NextPackFile() ; on continue l'opération tant que adresseMemoire est différent de 0
Wend
ClosePack() ; ferme le pack
Else
MessageRequester(TitreErreur$, MsgError$, #MB_ICONERROR)
Resultat = 0
EndIf
ProcedureReturn Resultat
EndProcedure
@ SPH
Je te suggère d'utiliser l'extension *.pak ou *.pack et non *.zip pour ton archive. Winzip ne peut pas extraire les fichiers compressés par la librairie Packer de PB.
A+
Guimauve
Re: CreatePack(NomFichier$)
Publié : ven. 07/janv./2011 18:59
par SPH
@Guimauve : merci, si je ne m'en sort pas avec mon code, je matterais le tiens
brossden a écrit :Bonjour SPH
"OpenPack(NomFichier$)" est de trop !!
Code : Tout sélectionner
NomFichier$="d:/5pics.zip"
CreatePack(NomFichier$)
;OpenPack(NomFichier$)
For i=1 To 5
AddPackFile("d:/"+Str(i)+".jpg")
Next
ClosePack()
Salut Brossden, ca faisait un baille qu'on t'avait pas vu !!!!!
Ok le code marche sauf une chose, le degré de compression :
Code : Tout sélectionner
NomFichier$="d:/5pics.pak"
CreatePack(NomFichier$)
For i=1 To 5
AddPackFile("d:/"+Str(i)+".jpg",9)
Next
ClosePack()
J'ai mis 9 en pourtant, j'ai autant de poids qu'avec nimporte quel nombre !! Zarb ce.... bug ?
Mais la compression m'importe peu.
J'ai matté la notice de PB et il n'y a pas d'instruction sur la decompression FICHIER. Juste MEMORY que je ne sais pas utiliser !!
Ce serait quoi le code pour dezipper mon NomFichier$="d:/5pics.pak"

Re: CreatePack(NomFichier$)
Publié : ven. 07/janv./2011 21:15
par Guimauve
Petit rappel, le code que j'ai donnée n'est pas de moi, il est de Denis.
Pour ce qui est de la taille de ton archive, il est difficile de compresser des fichiers déjà compressés. Fait un test avec des fichiers *.bmp, tu vas voir que la différence sera apparente entre les différents niveau de compression.
A+
Guimauve
Re: CreatePack(NomFichier$)
Publié : ven. 07/janv./2011 23:05
par SPH
Guimauve a écrit :Petit rappel, le code que j'ai donnée n'est pas de moi, il est de Denis.
Pour ce qui est de la taille de ton archive, il est difficile de compresser des fichiers déjà compressés. Fait un test avec des fichiers *.bmp, tu vas voir que la différence sera apparente entre les différents niveau de compression.
A+
Guimauve
Ok j'ai verifié et en effet, c'est une evidence.
Tu aurais une idee du code de decompression de "d:/5pics.pak" pour ce code

:
Code : Tout sélectionner
NomFichier$="d:/5pics.pak"
CreatePack(NomFichier$)
For i=1 To 5
AddPackFile("d:/"+Str(i)+".jpg",9)
Next
ClosePack()
Re: CreatePack(NomFichier$)
Publié : sam. 08/janv./2011 6:35
par Guimauve
Un truc du genre :
Code : Tout sélectionner
NomFichier$="d:/5pics.pak"
If OpenPack(NomFichier$)
For i = 1 To 5
AdresseMemoire = NextPackFile()
If AdresseMemoire > 0
Taille = PackFileSize()
If CreateFile(i, "d:/"+Str(i)+".jpg")
WriteData(i, AdresseMemoire, Taille)
CloseFile(i)
EndIf
EndIf
Next
ClosePack()
EndIf
Bien évidemment, j'ai pas testé le code mais ça devrait fonctionner.
A+
Guimauve
Re: CreatePack(NomFichier$)
Publié : sam. 08/janv./2011 13:46
par SPH
Guimauve a écrit :Un truc du genre :
Code : Tout sélectionner
NomFichier$="d:/5pics.pak"
If OpenPack(NomFichier$)
For i = 1 To 5
AdresseMemoire = NextPackFile()
If AdresseMemoire > 0
Taille = PackFileSize()
If CreateFile(i, "d:/"+Str(i)+".jpg")
WriteData(i, AdresseMemoire, Taille)
CloseFile(i)
EndIf
EndIf
Next
ClosePack()
EndIf
Bien évidemment, j'ai pas testé le code mais ça devrait fonctionner.
A+
Guimauve
Merci BEAUCOUP. Ca marche et tu m'as evité un autre bug PB...
