Comment acceder un fichier en C - C - Programmation
Marsh Posté le 30-11-2005 à 14:57:49
fopen(), fclose(), fputs(), fgets(), fprintf(), fwrite(), fread(), ...
Tu trouves tout ça dans stdio.h
Marsh Posté le 30-11-2005 à 15:16:31
- Tu déclares un pointeur de type "FILE *" => FILE *fp
- Tu copie dans ce pointeur le résultat d'un "fopen" sur ton fichier =>
+ mode "b" sur chaque mode précédent si ton fichier est binaire => fp=fopen("mon_fichier", "r+b" ) par exemple
- Tu utilises ensuite ton pointeur pour chaque fonction de lecture ou d'écriture que tu décides d'utiliser => Pour écrire 'Hello World" dans ton fichier préalablement ouvert en mode "w", "w+", "a", "a+" ou "r+" (ou tous ces modes précédents + "b" ) => fputs("Hello World", fp);
Une fois que t'as plus besoin d'accéder à ton fichier, tu passes ton pointeur à la fonction "fclose" => fclose(fp);
Bien entendu, toujours vérifier si le retour de "fopen" est nul car cela signifie que ton programme n'a pas réussi à ouvrir le fichier => cas à gérer
fp=fopen("zogloto", "w" ); |
Marsh Posté le 04-12-2005 à 15:08:30
Et tiens, au fait, si je veux lire un fichier et le rentrer dans un tableau
à deux dimension x et y comment je fais pour le remplir de manière
à ce que chaque case contienne un caractère (un chiffre dans mon cas)
et faire que l'algo soit intelligente (qu'elle puisse s'adapter à la taille du tableau,
en ayant par exemple dans le fichier une saisie formatté avec des retours
à la ligne) ?
Marsh Posté le 04-12-2005 à 18:10:58
guguy a écrit : Et tiens, au fait, si je veux lire un fichier et le rentrer dans un tableau |
J'ajoute malloc() / realloc() / free() pour la gestion dynamique de la mémoire, et tu as les éléments en main.
Ceci dit, si tu sais à peine comment gérer un fichier, je te vois mal démarrer sur une application complètement dynamique. Ca va faire trop de concepts à maitriser d'un coup.
Commence par des fichiers simples et des tableaux de tailles fixes. Surveiller la taille de façon à ne pas déborder. Surveiller aussi la fin de lecture.
Poste ton code si tu a des problèmes.
Rappel, ici, on ne fait pas le boulot des autres... c'est à toi de fournir l'effort...
Marsh Posté le 04-12-2005 à 19:50:25
A vrai dire je sais correctement gerer l'allocation dynamique de mémoire,
ce n'est pas ca mon problème.
C'est vrai que j'ai mal posé ma question, elle est en fait trés simplifiable,
est-ce que on peut détecter un passage à la ligne dans un fichier
(équivalent à un '\n' donc) pour pouvoir donner au programme la taille
qu'il faudra allouer au tableau ?
Marsh Posté le 04-12-2005 à 20:17:26
guguy a écrit : C'est vrai que j'ai mal posé ma question, elle est en fait trés simplifiable, |
On peut compter les lignes en lisant avec fgetc() et en comptant les '\n'. Attention à la dernière si elle n'est pas terminée par un \n.
Ensuite, fgets() permet de lire des lignes. On teste la présence du '\n' pour savoir is la ligne a été lue complètement, sinon, on agrandi (realloc()) et on lis la suite (au bon endroit évidemment, il y a un piège...)
On peut aussi réallouer le tableau de lignes en fonction de la demande...
Il y a plusieurs possibilités plus ou moins simples...
Marsh Posté le 04-12-2005 à 21:15:53
Oki, je viens de jetter un oeil dans des sources c++ que j'avais codé il
y a un bail et je suis tombé sur un bout de code qui comptait les lignes
et j'utilisais ifstream pour ouvrir le fichier et getline me servait à compter
les lignes (et j'ai à peine à le modifier pour qu'il me donne la taille de
la plus grande ligne).
Mais est-ce que ces instructions existent en C ?
Marsh Posté le 04-12-2005 à 21:51:11
Il y a malgrès tout une fonction getline() dans de nombreuses versions de la libc (dont la glibc).
Marsh Posté le 30-11-2005 à 14:55:53
Bonjour je voudrais savoir comment on accede à un fichier en C.
En fait, je voudrais faire un ptit prog qui me permet de gerer des personnes et qui me demande le nom de la personne, prenom etc, puis qui range ces données dans un fichier.
Puis quand je lui demande de m'afficher la liste des personnes, il va les rechercher dans le fichier...
C'est possible? comment on fait???