Salut!
Pour bufferiser un fichier j'utilise "fgets", mais cette fonction lit ligne par ligne.
Existe il une fonction qui lise un fichier en un bloc et le stocke directement dans une grande chaine de caractère par exemple?
Merci de votre aide.![]()
Salut!
Pour bufferiser un fichier j'utilise "fgets", mais cette fonction lit ligne par ligne.
Existe il une fonction qui lise un fichier en un bloc et le stocke directement dans une grande chaine de caractère par exemple?
Merci de votre aide.![]()
Il faut ouvrir le fichier en mode binaire, puis lire avec fread.
OK mais "fread" demande le nombre d'octets à lire.Envoyé par Mayti4
Si je met 1000 pour un fichier de 100 octets est-ce que cela posera problème?
La méthode est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 char *p; size_t len; f = fopen("toto.txt", "r"); // il faut tester f, je passe la-dessus // on se positionne en fin de fichier fseek(f, 0l, SEEK_END); // on lit la taille len = ftell(f); // on revient en début de fichier fseek(f, 0l, SEEK_SET); // on alloue len + 1 pour le zéro terminal if ((p = malloc(len+1)) != NULL) { size_t len1; len1 = fread(p, 1, len, f) ; p[len1] = 0; if (len1 != len) { fprintf(stderr, "Pb lecture fichier\n"); } } else { fprintf(stderr, "Pb alloc mémoire\n"); return; } fclose(f);
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Non, tu auras 100 octets dans ton buffer.Envoyé par seriousme
OK ça m'a l'air propre et efficace.
Sinon à la "bourrin" en mettant trop d'octets à lire pour "fread" ça pose problème ou est-ce que je récupère quand même ce qui est lu?
EDIT : Mayti4 => OK merci, ce n'est pas une méthode élégante mais elle tient en une ligne.![]()
comme le dit mayti4, il n'y a pas de pb. Pour préciser, fread() te renvoie le nombre d'objets effectivement lus (qui peut être inférieur à celui demandé)
Non. fread() retourne le nombre de blocs lus. Ajouter le 0 final à la main et prévoir la place nécessaire...Envoyé par seriousme
Sous linux, pour connaitre la taille d'un fichier, j'utilise stat()
man 2 stat
Ok merci de toutes vos réponses.
C'est.
Partager