Page 1 sur 1

J'arrive pas à m'amuser :-)

Publié : sam. 18/déc./2004 21:55
par gansta93
Bnjour,

J'essais de faire un petit truc qui mait en pack tout les fichiers d'un dossier, sans tenire compte des sous-dossiers. Mais le truc, c'est qu'au bout d'un moment, ça plante.
Si quelqu'un peut me dire où est l'erreur svp.

Code : Tout sélectionner

Global Dossier.s,Pack.s,compteur,Nom$,Taille

Dossier.s=Space(#Max_Path)
Pack.s=Space(#Max_path)

dossier=PathRequester("Dossier où sauvegarder les fichier:","")
If dossier=""
End
EndIf
If Right(dossier,1)<>"\"
dossier=dossier+"\"
EndIf
pack.s=SaveFileRequester("Nom du pack",Left(dossier,Len(dossier)-1)+".pak","Fichier compressé(*.pak)|*.pak",0)
If pack=""
End
EndIf
If ExamineDirectory(0,Dossier,"*.*") And CreatePack(Pack)
entree=NextDirectoryEntry()
While Entree
If entree=1
nom$=DirectoryEntryName()
MessageRequester("Info",nom$)
taille=DirectoryEntrySize()
AddPackMemory(@nom$,Len(Nom$),9)
AddPackMemory(@taille,Len(Str(Taille)),9)
AddPackFile(nom$,9)
FreeMemory(@taille)
FreeMemory(@nom$)
EndIf
entree=NextDirectoryEntry()
compteur+1
Wend
MessageRequester("Info",Str(compteur)+" fichiers sauvegardés.",#mb_ok|#mb_iconasterisk)
Else
MessageRequester("Erreur","Impossible de créer le pack ou d'examiner le répertoir.",#mb_ok|#mb_iconstop)
EndIf
End
Merci d'avance.

Publié : sam. 18/déc./2004 22:21
par Anonyme2
Pour commencer, c'est quoi ces 2 lignes :

Code : Tout sélectionner

FreeMemory(@taille) 
FreeMemory(@nom$) 
Y sont ou les AllocateMemory correspondants ?

Publié : sam. 18/déc./2004 22:25
par gansta93
Je me disais qu'éventuellemant, si je mettais ça, ça planterait plus... mais bon... ça plante quand même...

Publié : sam. 18/déc./2004 22:28
par Anonyme2
J'ai déjà évoqué des problèmes rencontrés avec les commandes packer

Tu ne dois pas écrire du code comme ça

Code : Tout sélectionner

AddPackMemory(@nom$,Len(Nom$),9)
sans tester le résultat, ta recherche commence par essayer de verrouiller tout ce qui pourrait ne pas aller.

La taille des fichiers même mise sous forme de chaine est en général une chaine courte, je ne sais pas si si tenter de compresser avec un taux de 9 est raisonnable :roll:

Plutot mettre 0, c'est pas ça qui prend de la place.

Publié : sam. 18/déc./2004 22:30
par Anonyme2
commence donc par tester ces résultats et affiche dans une messagerequester. Tu devrais trouver

Publié : sam. 18/déc./2004 22:41
par Anonyme2
Essaye ça

Code : Tout sélectionner

Global Dossier.s,Pack.s,compteur,Nom$,Taille 

Dossier.s=Space(#Max_Path) 
Pack.s=Space(#Max_path) 

dossier=PathRequester("Dossier où sauvegarder les fichier:","") 
If dossier="" 
  End 
EndIf 

If Right(dossier,1)<>"\" 
   dossier=dossier+"\" 
EndIf 
pack.s=SaveFileRequester("Nom du pack",Left(dossier,Len(dossier)-1)+".pak","Fichier compressé(*.pak)|*.pak",0) 

If pack="" 
   End 
EndIf 
Debug Dossier
If ExamineDirectory(0,Dossier,"*.*") And CreatePack(Pack) 
   entree=NextDirectoryEntry()
   While Entree 
      If entree=1 
         nom$=DirectoryEntryName() 
         MessageRequester("Info",nom$) 
         taille=DirectoryEntrySize() 
         If AddPackMemory(@nom$,Len(Nom$),0) 
            If AddPackMemory(@taille,Len(Str(Taille)),0) 
               If AddPackFile(Dossier+nom$,0) 
               Else
                  MessageRequester("Erreur","AddPackFile(nom$,9) a échoué",16)
               EndIf
            Else
               MessageRequester("Erreur","AddPackMemory(@taille,Len(Str(Taille)),9) a échoué",16)
            EndIf
         Else
           MessageRequester("Erreur","AddPackMemory(@nom$,Len(Nom$),9) a échoué",16)
         EndIf
      EndIf 
      entree=NextDirectoryEntry() 
      compteur+1 
   Wend 
   MessageRequester("Info",Str(compteur)+" fichiers sauvegardés.",#mb_ok|#mb_iconasterisk) 
Else 
   MessageRequester("Erreur","Impossible de créer le pack ou d'examiner le répertoir.",#mb_ok|#mb_iconstop) 
EndIf 
End 

Publié : dim. 19/déc./2004 13:19
par gansta93
Salut,

Arf, ça plante toujours...
Je ne comprand vraimant pas ...:

Publié : dim. 19/déc./2004 13:28
par nico
T'as pas de fichier vide?

Publié : dim. 19/déc./2004 13:30
par Anonyme2
gansta93 a écrit :Salut,

Arf, ça plante toujours...
Je ne comprand vraimant pas ...:
Le code que j'ai mis fonctionnait chez moi.

Tu peut dire c'est quoi qui plante et ça plante comment

Publié : dim. 19/déc./2004 13:44
par gansta93
C'est un peu quand il veut qu'il plante... la boîte dialogue Ce programme va être arrêté car il a effectué une opération non conforme... j'ai biensure fait "Détails", et voici ce que ça me donne:
PUREBASIC123658 a causé une défaillance de page dans
le module KERNEL32.DLL à 0167:bff7a125.
Registres :
EAX=0074f9f4 CS=0167 EIP=bff7a125 EFLGS=00010212
EBX=007510d0 SS=016f ESP=0063fd68 EBP=0063fda8
ECX=0065fa78 DS=016f ESI=0074f9f4 FS=5cd7
EDX=00100000 ES=016f EDI=000016dc GS=0000
Octets à CS : EIP :
8b 03 a8 01 74 25 25 fc ff ff 0f 8b 53 08 03 f8
État de la pile :
0063fda8 000016dc 0074f0d0 00000924 bff7a3a0 00650000 0074f9f4 000016dc 00000000 0065000c 00650000 0074f0d0 00000000 00000000 00000751 00000750
Voilà ce que je peux dire.

Publié : dim. 19/déc./2004 13:57
par Anonyme2
Postes tout le code que tu utilises car j'ai das doutes...

Publié : dim. 19/déc./2004 14:08
par gansta93
J'ai enlevé le seul debug que tu utilisais, je le désactive tout le temps...

Code : Tout sélectionner

Global Dossier.s,Pack.s,compteur,Nom$,Taille

Dossier.s=Space(#Max_Path)
Pack.s=Space(#Max_path)

dossier=PathRequester("Dossier où sauvegarder les fichier:","")
If dossier=""
  End
EndIf

If Right(dossier,1)<>"\"
   dossier=dossier+"\"
EndIf
pack.s=SaveFileRequester("Nom du pack",Left(dossier,Len(dossier)-1)+".pak","Fichier compressé(*.pak)|*.pak",0)

If pack=""
   End
EndIf
MessageRequester("",Dossier)
If ExamineDirectory(0,Dossier,"*.*") And CreatePack(Pack)
   entree=NextDirectoryEntry()
   While Entree
      If entree=1
         nom$=DirectoryEntryName()
         MessageRequester("Info",nom$)
         taille=DirectoryEntrySize()
         If AddPackMemory(@nom$,Len(Nom$),0)
            If AddPackMemory(@taille,Len(Str(Taille)),0)
               If AddPackFile(Dossier+nom$,0)
               Else
                  MessageRequester("Erreur","AddPackFile(nom$,9) a échoué",16)
               EndIf
            Else
               MessageRequester("Erreur","AddPackMemory(@taille,Len(Str(Taille)),9) a échoué",16)
            EndIf
         Else
           MessageRequester("Erreur","AddPackMemory(@nom$,Len(Nom$),9) a échoué",16)
         EndIf
      EndIf
      entree=NextDirectoryEntry()
      compteur+1
   Wend
   MessageRequester("Info",Str(compteur)+" fichiers sauvegardés.",#mb_ok|#mb_iconasterisk)
Else
   MessageRequester("Erreur","Impossible de créer le pack ou d'examiner le répertoir.",#mb_ok|#mb_iconstop)
EndIf
End
Le dossier sur lequel je teste ça n'a pas de fichiers vide, le plus petit fais 1 KO, et c celui-là qu'il ne fait pas... il plante sur celui-là... c le dernier. Sinon, tous les autres, il les fait!

Publié : dim. 19/déc./2004 15:19
par Anonyme2
gansta93 a écrit :J'ai enlevé le seul debug que tu utilisais, je le désactive tout le temps...
Je ne comprend pas :roll:
gansta93 a écrit :Le dossier sur lequel je teste ça n'a pas de fichiers vide, le plus petit fais 1 KO, et c celui-là qu'il ne fait pas... il plante sur celui-là... c le dernier. Sinon, tous les autres, il les fait!

C'est quoi il plante, tu as la fenêtre Ce programme va être arrêté car gna gna gna...

Vérifie que le nom de fichier est correct, y compris le nom de dossier

Sinon je ne sais pas, sans le fichier c'est difficile à dire, le 1Ko ne veut pas dire grand chose, click droit dessus et propriétés et là tu connais la taille.

Fichier système ? etc, un zip, un rar, un ace etc ?

Publié : dim. 19/déc./2004 19:40
par gansta93
Pour la première question, pas important :-).
Mais quand je dis plante, c bien ce que tu dis: boîte de dialogue Ce programme va être arêté...
Le fichier dont je parle fait en fait 31O, 4096O utilisés.
C'est un simple fichier avec des données textes.
[edit]: pas d'attribut spécial, juste "Archive".