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 :idea:
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 !!!!! :mrgreen:

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... :wink: