[Résolu] CreatePack(NomFichier$)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

[Résolu] CreatePack(NomFichier$)

Message 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()

Dernière modification par SPH le sam. 08/janv./2011 13:47, modifié 1 fois.

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Re: CreatePack(NomFichier$)

Message 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()
Denis

Bonne Jounée à tous
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: CreatePack(NomFichier$)

Message 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
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: CreatePack(NomFichier$)

Message 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" :?: :?:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: CreatePack(NomFichier$)

Message 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
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: CreatePack(NomFichier$)

Message 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()

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: CreatePack(NomFichier$)

Message 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
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: CreatePack(NomFichier$)

Message 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:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre