FAQ PureBasicConsultez toutes les FAQ
Nombre d'auteurs : 7, nombre de questions : 68, dernière mise à jour : 3 janvier 2013 Ajouter une question
Bienvenue dans la F.A.Q. PureBasic !
Celle-ci va tenter de répondre aux questions les plus fréquemment posées sur le langage PureBasic et tous ses outils de programmation. Si elle n'a pas pour vocation de répondre à toutes les interrogations possibles, elle reste une bonne base de connaissances sur le PureBasic, et ne demande qu'à être enrichie par vos expériences personnelles.
Bien entendu, malgré toute l'attention qui a pu être portée à cette F.A.Q., des erreurs ont toujours pu s'y glisser. Prenez donc toutes les précautions qui s'imposent avant d'essayer un exemple.
Nous vous souhaitons une bonne lecture ! Et n'oubliez pas qu'en cas de problème, vous pourrez toujours poser votre question sur le forum PureBasic !
L'équipe PureBasic de Developpez.
- Comment calculer la taille d'un répertoire ?
- Comment sauvegarder et charger les données d'une variable structurée à partir d'un fichier ?
- Comment sauvegarder et charger les données d'une variable structurée comportant un tableau dynamique ?
- Comment comparer deux fichiers avec les fonctions MD5 de PureBasic ?
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | Procedure.q DirectorySize(Recursive, Directory.s, FirstTime = #True) Protected MyDir, FileName.s Static TotalSize.q If FirstTime TotalSize = 0 EndIf MyDir = ExamineDirectory(#PB_Any, Directory, "*.*") If MyDir While NextDirectoryEntry(MyDir) If Right(Directory, 1) <> "\" Directory = Directory + "\" EndIf FileName = DirectoryEntryName(MyDir) If DirectoryEntryType(MyDir) = #PB_DirectoryEntry_Directory And Recursive If FileName <> "." And FileName <> ".." DirectorySize(Recursive, Directory + FileName, #False) EndIf ElseIf DirectoryEntryType(MyDir) = #PB_DirectoryEntry_File TotalSize + DirectoryEntrySize(MyDir) EndIf Wend FinishDirectory(MyDir) EndIf ProcedureReturn TotalSize EndProcedure Debug DirectorySize(#False, #PB_Compiler_Home) Debug DirectorySize(#True, #PB_Compiler_Home) |
Vous pouvez utiliser les Commandes WriteFloat() ou WriteLong() etc, pour enregistrer champ par champ les données d'une variable structurée, mais c'est fastidieux !
Ou vous pouvez enregistrer en une seule commande l'ensemble des données de votre variable grâce aux commandes WriteData() et ReadData().
Attention : Si vous avez un champ de type string (.s) dans votre structure, la chaîne de caractères ne sera pas sauvegardée. En effet, le champ ne contient que l'adresse de la chaîne de caractères.
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | Structure s_Vecteur x.f y.f z.f EndStructure Structure s_Objet Position.s_Vecteur Vitesse.f Collision.l EndStructure Define Variable.s_Objet Define Fichier.s With Variable \Position\x = 34.6 \Position\y = 87.32 \Position\z = 91.45 \Vitesse = 3.0 \Collision = #True EndWith Fichier = "Test.dat" ;Enregistre les données Resultat = CreateFile(#PB_Any, Fichier) If Resultat WriteData(Resultat, @Variable, SizeOf(s_Objet)) CloseFile(Resultat) Else MessageRequester("Error save", "Fichier " + Fichier, #PB_MessageRequester_Ok) EndIf ;Charge les données Resultat = ReadFile(#PB_Any, Fichier) If Resultat ReadData(Resultat, @Variable, SizeOf(s_Objet)) CloseFile(Resultat) Else MessageRequester("Error load", "Fichier " + Fichier, #PB_MessageRequester_Ok) EndIf ;Affiche le résultat With Variable Debug \Position\x Debug \Position\y Debug \Position\z Debug \Vitesse Debug \Collision EndWith |
La sauvegarde s'effectue en deux fois, il faut sauvegarder le tableau indépendamment des autres données.
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | Structure s_Vecteur x.f y.f z.f EndStructure Structure s_Aux Position.s_Vecteur Vitesse.f Collision.l EndStructure Structure s_Objet Extends s_Aux Array Tab.s_Vecteur(12) EndStructure Define Variable.s_Objet Define Fichier.s With Variable \Position\x = 34.6 \Position\y = 87.32 \Position\z = 91.45 \Vitesse = 3.0 \Collision = #True \Tab(3)\x = 54.78 EndWith Fichier = "Test.dat" ;Enregistre les données Resultat = CreateFile(#PB_Any, Fichier) If Resultat ;On enregistre les données avant le tableau WriteData(Resultat, @Variable, SizeOf(s_Aux)) ;Enregistre le tableau séparément en indiquant sa taille WriteData(Resultat, @Variable\Tab(), ArraySize(@Variable\Tab()) * SizeOf(s_Vecteur)) CloseFile(Resultat) Else MessageRequester("Erreur sauvegarde", "Fichier " + Fichier, #PB_MessageRequester_Ok) EndIf ;Efface les données de la variable ClearStructure(@Variable, s_Objet) InitializeStructure(@Variable, s_Objet) ;Charge les données Resultat = ReadFile(#PB_Any, Fichier) If Resultat ReadData(Resultat, @Variable, SizeOf(s_Aux)) ;Lit le tableau séparément ReadData(Resultat, @Variable\Tab(), ArraySize(@Variable\Tab()) * SizeOf(s_Vecteur)) CloseFile(Resultat) Else MessageRequester("Erreur Chargement", "Fichier " + Fichier, #PB_MessageRequester_Ok) EndIf ;Affiche le résultat With Variable Debug \Position\x Debug \Position\y Debug \Position\z Debug \Vitesse Debug \Collision Debug \Tab(3)\x EndWith |
Voici un petit utilitaire qui permet de comparer deux fichiers en utilisant les fonctions MD5 de PureBasic.
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | ;######################### ;# Compare The Files # ;# (p) 2010 quadWorks.de # ;######################### OpenWindow (0,0,0,360,110,"Compare The Files", #PB_Window_WindowCentered | #PB_Window_ScreenCentered | #PB_Window_BorderLess) ButtonGadget(0, 10, 10,340, 24, ".. please chose a file ..") ButtonGadget(1, 10, 44,340, 24, ".. please chose a file ..") ButtonGadget(2, 82, 78, 70, 24, "Compare") TextGadget (3,160, 84,300, 20, "Most likely different") ButtonGadget(4, 10, 78, 20, 24, "?", #PB_Text_Center) ButtonGadget(5, 36, 78, 40, 24, "Quit", #PB_Text_Center) LoadFont (0, "Arial", 11) For i = 0 To 5 : SetGadgetFont(i,FontID(0)) : Next i AddKeyboardShortcut(0, #PB_Shortcut_Command | #PB_Shortcut_Q, #PB_Event_CloseWindow) Repeat Event = WaitWindowEvent(100) Select Event Case #PB_Event_Gadget Gadget = EventGadget() Select Gadget Case 0, 1 temp$ = OpenFileRequester("Chose file", "", "", 0) If temp$ <> "" SetGadgetText(Gadget, "1. " + GetFilePart(temp$) + " - " + StrF(FileSize(temp$) / 1024, 3) + "kb - " + FormatDate("%yyyy-%mm-%dd %hh:%ii:%ss", GetFileDate(Temp$, #PB_Date_Modified))) If Gadget = 0 MD5a$ = MD5FileFingerprint(temp$) fileA$ = temp$ Else MD5b$ = MD5FileFingerprint(temp$) fileB$ = temp$ EndIf GadgetToolTip(Gadget, Temp$) EndIf Case 2 If MD5a$ = "" Or MD5b$ = "" MessageRequester("Information", "Please select two files to compare.") Else If MD5a$ = MD5b$ SetGadgetText(3, "Most likely identical") Else SetGadgetText(3, "Most likely different") EndIf EndIf Case 4 : MessageRequester("Information", "TinyCompare compares the MD5-fingerprints of two files. If the fingerprints are identical, the chance is high, that the two files are identical.") EndSelect EndSelect Until Event = #PB_Event_CloseWindow Or Event = #PB_Event_Menu Or Gadget = 5 |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.