J'arrive pas à m'amuser :-)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

J'arrive pas à m'amuser :-)

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Pour commencer, c'est quoi ces 2 lignes :

Code : Tout sélectionner

FreeMemory(@taille) 
FreeMemory(@nom$) 
Y sont ou les AllocateMemory correspondants ?
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Je me disais qu'éventuellemant, si je mettais ça, ça planterait plus... mais bon... ça plante quand même...
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

commence donc par tester ces résultats et affiche dans une messagerequester. Tu devrais trouver
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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 
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Salut,

Arf, ça plante toujours...
Je ne comprand vraimant pas ...:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

T'as pas de fichier vide?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Postes tout le code que tu utilises car j'ai das doutes...
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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!
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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 ?
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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".
Répondre