fread et fwrite inspirés du C
Publié : sam. 08/mai/2004 12:01
Je sais pas ce que j'ai en ce moment avec les pointeurs mais ils me plaisent plus que d'habitude, et j'arrête pas de leur chercher chaque fois une nouvelle utilité, donc j'ai eu l'idée de lire dans un fichier le type qu'on voulai (à part peut être une chaine de caracteres au sens strict, c'est a dire "null terminated" dont on ne connai pas la taille dans le fichier). Ce code s'adresse surtout aux structures et je demande à ceux qui s'y connaissent pour me dire comment savoir si un fichier est ouvert, car je suis passé par usefile mais i le fichier n'est pas ouvert le compilateur génere une erreur (en mode test avec F5 en tout cas). Toute remarque sur une partie du code qui manquerai de logique est aussi la bienvenue.
Voila donc les deux fonctions intéressées (que j'ai mises dans un fichier que j'ai appellé file.pb pour les tests)
Et maintenant deux exemples d'utilisation à utiliser dans l'ordre écrire puis lire (enfin ca va sans dire... de toute facon j'ai essayé de faire une gestion des erreurs)
En fait je vais peut être me faire deux fichiers stdlib.pb et stdio.pb avec ce que je programme en ce moment et puis pour rester dans la logique des noms de fonction PB je les renommerai FileRead et FileWrite.
Dri
Voila donc les deux fonctions intéressées (que j'ai mises dans un fichier que j'ai appellé file.pb pour les tests)
Code : Tout sélectionner
Procedure fwrite(buffer.l, size.b, count.b, file.l)
If buffer=0 Or count<1 Or size<1 Or UseFile(file)=0
ProcedureReturn 0
EndIf
WriteData(buffer, size*count)
ProcedureReturn 1
EndProcedure
Procedure fread(buffer.l, size.b, count.b, file.l)
If buffer=0 Or count<1 Or size<1 Or UseFile(file)=0
ProcedureReturn 0
EndIf
If Lof()-Loc()<(size*count)
ProcedureReturn 0
EndIf
ReadData(buffer, size*count)
ProcedureReturn 1
EndProcedure
Code : Tout sélectionner
IncludeFile("file.pb")
Structure bidon
long.l
word.w
byte.b
EndStructure
tabsize = 5
Dim tab.bidon(tabsize-1)
;en C "bidon tab[tabsize];" irai de 0 à tabsize-1
;on rempli le tableau pour avoir des données
For i=0 To tabsize-1
tab(i)\long = 4 * i
tab(i)\word = 2 * i
tab(i)\byte = 1 * i
Next i
If OpenFile(0, "bidon.dat")
fwrite(@tab(0), SizeOf(bidon), tabsize, 0)
CloseFile(0)
EndIf
;on prend soin de garder le résultat histoire de comparer
For i=0 To tabsize-1
Debug tab(i)\long
Debug tab(i)\word
Debug tab(i)\byte
Debug " "
Next i
Code : Tout sélectionner
IncludeFile("file.pb")
Structure bidon
long.l
word.w
byte.b
EndStructure
tabsize = 5
Dim tab.bidon(tabsize-1)
;en C "bidon tab[tabsize];" irai de 0 à tabsize-1
;on ne rempli pas le tableau cette fois...
If OpenFile(0, "bidon.dat")
fread(@tab(0), SizeOf(bidon), tabsize, 0)
CloseFile(0)
EndIf
;on peut désormais comparer avec l'écriture
For i=0 To tabsize-1
Debug tab(i)\long
Debug tab(i)\word
Debug tab(i)\byte
Debug " "
Next i
Dri
