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 © 2025 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.



