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.


SommaireFichiers et répertoires (4)
précédent sommaire suivant
 

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)

Mis à jour le 17 février 2011

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

Mis à jour le 6 mars 2011 comtois

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

Mis à jour le 6 mars 2011 comtois

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

Mis à jour le 10 mars 2011

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2018 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.

 
Responsable bénévole de la rubrique PureBasic : comtois -