euh..bon voila je crois ke g un peu de mal avec tout ce ki est fichier externe,....
bon apres avoir chercher sans trouver:
je v vous mettre le code pour ke vous compreniez mieux
FILE *fichier2 = fopen ("HSCR", "wb");
fputs ("200 \0",fichier2);
fputs ("100 \0",fichier2);
fputs ("50 \0",fichier2);
fputs ("0 \0",fichier2);
fputc (0, fichier2);
fputs ("HSC", fichier2);
fputc (0, fichier2);
fputc (OTH_TAG, fichier2);
SYM_ENTRY *entry2;
void *HSC_ptr;
entry2=SymFindPtr(SYMSTR("HSCR"),0);
HSC_ptr=HeapDeref(entry2->handle)+2;
fclose (fichier2);
pour declarer mon fichier externe
et
for(i=0;i<5;i++){
sprintf (buffer_hsc, "%s",HSC_ptr+i*5);
XDrawDGlowStr(27,30+i*9,buffer_hsc,7);
}
pour l'afficher...
makeureusement... j'ai l'impression k'il ne prend pas en compte les"\0" ki doivent"fermer les chaines de caractere....
c a dire k'a chake ligne ca maffiche le score desiré + ceux ki suivent dans le fichier
voila

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406euh oui je c bien ke les espaces c po tres bo..mais c pour prevoir les socres ki vont juska 9999...
et a moins il existe une fonction permettant de decaler le reste du fichier..
ou meme d'exrire sans ecraser..

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406Il faut fermer le fichier avec fclose avant de venir le traffiquer avec SymFindPtr. Et il faudra aussi m'expliquer pourquoi tu mélanges les routines de stdio.h et celles de vat.h. Décide-toi pour une méthode! (Et je te conseille vat.h.)
Et c'est idiot de stocker les chiffres sous forme de chaînes. Stocke-les directement.
geogeo Le 04/08/2003 à 12:23Edité par geogeo le 04/08/2003 à 12:24 J'utilise jamais les fonctions fopen... mais je crois que tu devriat mettre fclose après fputc (OTH_TAG, fichier2);
Pour décaler le fichier je te propose une méthode barabre mais très simple, tu fait un fichier temporaire, tu inscrit au début ce ui ne doit pas être déplacé, puis le nonveau hightscore et le reste. Tu efface l'ancien et tu renomme le temps en ton fichier hightscore.
Si ton fichier ne varie pas en taille tu peut utiliser memcpy et memmove. Ou encore plus simple tu écrase l'ancien hightscore.
Tu pourrais donner le format du fichier?
loooooooooolll
hem....
euh...
je c pas si le fclose change grand chose
j'ave deja essailer de le faire avant
mais apres fo le reouvrir le fichier alors??
je fe fopen alors?
bon deja e v essailer ca
puis stoker les chiffres sous forme de chaine c clair c po tres optimiser mais bon ca marche kan meme nan?
pis c juste pour essailler puisk'apres je le ferai avec des caracteres..et la y a pas le choix!!!
et c koi le difference entre stdio et la vat
?
noob pawa..... hem
dsl

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406oki en fait fo utiliser la vat....si j'ai bien compris..ce ki est peu probable...
mais sinon pour en revenir a mon pti probleme...
persone voi pourquoi lle caractere nul n'est pas pris en compte?

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406Parce que fputs s'arrête au premier caractère nul qu'il trouve en s'attendant à ce que ce soit la fin de la chaîne. Manque de chance, c'est celui que tu as mis explicitement.
euyh..chu pas sur davoir tout saisi..enfait, fputs m'a zapper mon null???
l'**""#"
!!!
donc en fait fo ke je le rajoute apres du genre
*(BYTE*)(HSC_ptr+4)=0;
...
mais en fesant ca..cela ecrase les donnees situees a cet endroit de la memoie nan??
y a pas une fonction ki "insererai" plutot?

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406Écris tout avec vat.h, c'est plus simple.
Sinon, tu peux faire comme suggéré par geogeo et mettre un fputc(0,f);.
oki jve essailler avec la vat..mais mise a part (o c zoli ca )) ) la doc de YIGCC, yore pas une otre doc..en francais..
enfin sinon c po grave
jve essailler
kk> fputc c por mettre un char
mais ca ecrase ossi?

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406oki le zero de fputc(o,ficher)
il sert a koi?
admettons ke je n'ai rien dit..
dsl il fe tro cho...
looooooooooooool

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406oui mdr g editer tro tard ptetre...
et pour le probleme de l'ecraseme,t:
si g lon fichier deja creer, et ke je veut rajouter un score genre en 3 eme place,....
je pourrais pas rajouter le \0 avec fputc..je srai bolige de fair otrement nan?

Plus t'avance moins vite
Moins t'avance plus vite...
forums/4061 - tu sauvegarde tes scores
2 - tu recrée le fichier
Tu peux écraser si ton format te le permet, c'est à dire que les noms et scores ne sont pas variable en taille.
Tu fait quoi comme format pour les données?
Pff, franchement, pourquoi s'êmbeter avec des trucs de longueur variable ? Une simple structure de 3 'unsigned long' écrite avec fwrite ferait l'affaire.
euh..ptite kestion....
je crois ke j'ai fe une connerie en choisissant une chaine de char pour les scores
fallait mieu fair un fwrite comme disait.euh..je c plus
pis sinon
fputs ou fwrite..ca permet pas de mettre sa chaineo "mileu du fichier"
c a dire a l'adresse kon veut.. y a pas une fonction de ce type(fputs) ou on puisse preciser l'adresse du pointeur??

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406ba oui, tiens, tu peux faire ça pour chaque score:
position = ftell(fichier2);
// Mettre 10 '0' avec fwrite ou fputc (10 c'est le nombre de chiffres de 2^32)
fseek(fichier2, position, SEEK_SET);
// écrire le score avec fputs
Ensuite, tu sais que chaque score prend tjrs 10 octets, même s'ils sont parfois à 0, donc c'est plus facile à accéder (et modifier)
cuhi pas sur davoir tout bien compris la....
chui vraiment une sous merde ou bien???
lol
[edit]
ou sinon je refai tou le fichier..en uploadant koi..

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406je vais expliquer correctement alors (d'ailleirs je viens de me rendre compte que j'avais oublié un truc).
la fonction ftell(const FILE *stream) te donne ta position dans le fichier.
Donc tu l'utilises pour sauvegarder la position ds le fichier.
Ensuite, tu écris 10 caractères 0 à l'aide de fputc, on verra plus tard pourquoi faire ça
Là tu sauvegardes la position dans une autre variable avant d'utiliser fseek pour remettre la position d'avant.
Maintenant, tu utilises fputs pour mettre ta chaîne dans le fichier et là tu as 10 caractères pour ton score. Ceux qui ne sont pas ré-écrits par ta chaîne sont à 0 et c'est ce qu'il faut.
Pour finir l'écriture de ce score, tu restore la position n°2 avec fseek
Ensuite tu peux connaître l'adresse relative de chaque chîne avec 10 * numéro_de_la_chaîne.
On admet que tu a 5 scores max, un nom de joueur fait 3 caractères et un score 2 octets, donc on a max 99, donc ton fichier ce présentera de la façon suivante:
GEO-99-KWT-85-BB--15-LOL-01-AAA-50
Ce format est le plus simple à modifier et à lire.
Donc à l'offset 0 tu as GEO, il te suffira de l'afficher, puis tu compte 4 offset et tu as le score, tu fait ça pour afficher tous les hightscoer donc ça donne (7*score n°)-7. On comme à 1 pour score n°.
Les - représentent le caractère NULL.
Pour modifier un hightscore c'est un jeu d'enfant, tu écrase les données rien de plus.
geogeo> oui c ce ke je fait..'sof ke mes socres et me noms sont separes..)
mais comment ecreser a une adress precise...
car fputs ca fout ala fin..
ou alors fo le faire avec fssek et ftell mais la g po encore bien compris
mais steuplait goldencrystal laisse moi le tps!! chui suer lent kom gar!!
lol

Plus t'avance moins vite
Moins t'avance plus vite...
forums/406