bonjour,
je voudrai mettre le curseur de mon fichier au début
je fais comme ça
mais ça ne marche pas est se que vous pouvez m'aidez SVP ?Code:fseek(fichier, 0, SEEK_SET);
Version imprimable
bonjour,
je voudrai mettre le curseur de mon fichier au début
je fais comme ça
mais ça ne marche pas est se que vous pouvez m'aidez SVP ?Code:fseek(fichier, 0, SEEK_SET);
Bonjour,
La fonction fseek est bien utilisée. Peux-tu nous montrer un peu plus de code pour voir si le problème ne vient pas d'une autre ligne ?
Code:
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 fseek(fichier, 0, SEEK_SET); do { fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier); for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++) { for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++) { switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j]) { case '0': niveau[j][i] = 0; break; case '1': niveau[j][i] = 1; break; case '2': niveau[j][i] = 2; break; case '3': niveau[j][i] = 3; break; case '4': niveau[j][i] = 4; break; } } }
Bonjour,
Que veut dire "ça ne marche pas" ?
Est-ce que tu as une erreur de segmentation? Est-ce que ça ne compile pas ? Est-ce que tu ne te retrouve pas à la bonne position dans ton fichier ?
Bref, comment vois-tu que ceci ne marche pas ?
As tu essayé de vérifier où se trouve ton curseur après le fseek avec la fonction ftell ?
prototype :
long ftell (FILE *stream);
que je mette
ou rien c'est la même choseCode:fseek(fichier, 0, SEEK_SET);
mais quand je met
il m'affiche "Position courante du cuseur : 0Code:printf ("Position courante du cuseur : %ld\n", ftell(fichier));
je veux lire le début du fichier mais quand je le lance ça ne lis pas le fichier au début.
Relis les réponses qui t'avaient été apportées dans ton précédant sujet et vire-moi ce switch :roll:
Ensuite es-tu sûr que le début du fichier n'est pas lu ?
Ne serais-ce pas plutôt que tu essaye de lire et d'écrire avec deux méthodes différentes ?
Et puisqu'on est dans les questions bêtes :
- Est-ce que tu as au moins ouvert ton fichier ?
A priori oui, sinon ftell() renverrait « -1 ». À part cela,
- Que contient ton fichier ?
- Es-tu sûr que tu n'écrases pas ton fichier à l'ouverture à cause de mauvais flags (auquel cas il aurait une taille nulle) ?
- As-tu essayé de placer ftell() après fgets() ?
- Que valent NB_BLOCS_LARGEUR et NB_BLOCS_HAUTEUR ?
En plus de ce que te demande Obsidian, tu peux faire la chose suivante pour voir comment se passe la lecture :
Code:
1
2
3
4
5
6
7
8
9 fseek(fichier, 0, SEEK_SET); do { fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier); printf ("DEBUG : [%s]\n", ligneFichier); /* la suite de ton code */
çaCitation:
Que contient ton fichier ?
111110011111111114000001111100011001111101011011111100001011111101000011111100011211111111111001111130000001111111111111111111111111111111111111
111110011111111114000001111100011201110301011011110000000011110001000011111100011211111111111001111130000001111111111111111111111111111111111111
111110011111111114000001111100011201113301011011110000000011110001200011111100011211111111111001111130000001111111111111111111111111111111111111
111110011111111114000001111100011201113301011011110000000011113001200011111100011211111112111001111130000001111111111111111111111111111111111111
111110011111111114000001111100011201113301011011110000000011103301200011100000011211102112111001100130000001111111111111111111111111111111111111
111110011111111114000001111100011201113301011011110000000011103300200011100000011211002012111001020000300001110011111111110000003111111111111111
non parce que quand je metCode:Es-tu sûr que tu n'écrases pas ton fichier à l'ouverture à cause de mauvais flags (auquel cas il aurait une taille nulle) ?
il m'affiche le contenu du fichierCode:printf ("DEBUG : [%s]\n", ligneFichier);
ouiCitation:
As-tu essayé de placer ftell() après fgets() ?
je ne comprend pas vraiment la question.Citation:
Que valent NB_BLOCS_LARGEUR et NB_BLOCS_HAUTEUR ?
NB_BLOCS_LARGEUR et NB_BLOCS_HAUTEUR sont des define non?
Qu'as-tu mis à droite de NB_BLOCS_LARGEUR et NB_BLOCS_HAUTEUR lorsque tu les as déclarés ? (= sur la ligne où tu as mis #define )
ici
Code:
1
2 #define NB_BLOCS_LARGEUR 12 #define NB_BLOCS_HAUTEUR 12
Donc tu lis bien ton fichier à partir du début. Dont le fseek() fonctionne bien. Donc le problème initial est résolu.
et...? sous-entendu "voudrais-tu faire l'effort de nous en dire un peu plus comme par exemple la valeur renvoyée par ftell() (qui normalement doit ici donner 0)...?"
Hum, t'as joué dans Kaamelott toi non ? :roll:
Et surtout :
- Peut-on voir également la ligne ou tu appelles fopen() ?
Il serait bien possible que tu l'aies ouvert en mode "a".
voici le code
Code:
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
68 /* fichiers.c ---------- Par mateo21 Rôle : fonctions de lecture / écriture de fichiers de niveau. */ #include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include "constantes.h" //#include "fichiers.h" int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR]) { FILE* fichier = NULL; char ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0}; int i = 0, j = 0; fichier = fopen("niveaux.lvl", "r+"); if (fichier == NULL) return 0; int ligneActuel= 0; fseek(fichier, 0, SEEK_SET); do { fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier); for(i = 0; i < NB_BLOCS_LARGEUR; i++) { for(j = 0; j < NB_BLOCS_HAUTEUR; j++) { niveau[j][i] = ligneFichier[(i * NB_BLOCS_LARGEUR) + j] - '0'; } } ligneActuel = fgetc(fichier); }while (ligneActuel != EOF); fclose(fichier); return 1; } int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR]) { FILE* fichier = NULL; int i = 0, j = 0; fichier = fopen("editeur.lvl", "w"); if (fichier == NULL) return 0; for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++) { for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++) { fprintf(fichier, "%d", niveau[j][i]); } } fclose(fichier); return 1; }
Ce que je veux dire c'est qu'il y à plusieurs lignes dans mon fichier et que je lis la dernière ligne.Citation:
Citation:
Es-tu sûr que tu n'écrases pas ton fichier à l'ouverture à cause de mauvais flags (auquel cas il aurait une taille nulle) ?
Citation:
non parce que quand je met
Code:printf ("DEBUG : [%s]\n", ligneFichier);
Donc tu lis bien ton fichier à partir du début. Dont le fseek() fonctionne bien. Donc le problème initial est résolu.Citation:
il m'affiche le contenu du fichier
voici le fichier.