Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1750 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Comment acceder un fichier en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment acceder un fichier en C

n°1256026
Profil sup​primé
Posté le 30-11-2005 à 14:55:53  answer
 

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???

mood
Publicité
Posté le 30-11-2005 à 14:55:53  profilanswer
 

n°1256030
Elmoricq
Modérateur
Posté le 30-11-2005 à 14:57:49  profilanswer
 

fopen(), fclose(), fputs(), fgets(), fprintf(), fwrite(), fread(), ...
 
Tu trouves tout ça dans stdio.h

n°1256052
Sve@r
Posté le 30-11-2005 à 15:16:31  profilanswer
 


 
- Tu déclares un pointeur de type "FILE *" => FILE *fp
- Tu copie dans ce pointeur le résultat d'un "fopen" sur ton fichier =>  

  • pour écrire en réinitialisant le fichier: fp=fopen("mon_fichier", "w" )
  • pour lire: fp=fopen("mon_fichier", "r" )
  • pour ajouter à la fin: fp=fopen("mon_fichier", "a" )
  • pour écrire en réinitialisant le fichier ET le relire dans la foulée : fp=fopen("mon_fichier", "w+" )
  • pour lire ET écrire: fp=fopen("mon_fichier", "r+" )
  • pour ajouter à la fin ET le relire: fp=fopen("mon_fichier", "a+" )

+ 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" );
if (fp == NULL)
{
    // Impossible d'ouvrir "zogloto" pour y écrire - Traitement de ce cas particulier
    ...
    ...
    // Souvent c'est inutile de continuer le travail
    return ...;    
}
 
// Travail sur zogloto
fputc(..., fp);
fputs(..., fp);
...
...
 
// Fermeture zogloto
fclose(fp);


Message édité par Sve@r le 30-11-2005 à 15:27:30

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1258436
guguy
Posté le 04-12-2005 à 15:08:30  profilanswer
 

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) ?

Message cité 1 fois
Message édité par guguy le 04-12-2005 à 15:09:41
n°1258554
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-12-2005 à 18:10:58  profilanswer
 

guguy a écrit :

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) ?


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...


Message édité par Emmanuel Delahaye le 04-12-2005 à 18:13:08

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1258615
guguy
Posté le 04-12-2005 à 19:50:25  profilanswer
 

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 ?

Message cité 1 fois
Message édité par guguy le 04-12-2005 à 19:50:54
n°1258625
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-12-2005 à 20:17:26  profilanswer
 

guguy a écrit :

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 ?


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...


Message édité par Emmanuel Delahaye le 04-12-2005 à 21:04:05

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1258650
guguy
Posté le 04-12-2005 à 21:15:53  profilanswer
 

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 ?

n°1258655
chrisbk
-
Posté le 04-12-2005 à 21:21:34  profilanswer
 

non

n°1258677
matafan
Posté le 04-12-2005 à 21:51:11  profilanswer
 

Il y a malgrès tout une fonction getline() dans de nombreuses versions de la libc (dont la glibc).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Comment acceder un fichier en C

 

Sujets relatifs
Structure binaire d'un fichier JPEGQUESTION Accéder au Net depuis un intranet depuis VPN ????
Compter le nombre de ligne dans un fichier texte sous WindowsRESOLU coller des formules ss lien de fichier
Fichier CHM et HHCTRL.OCXSupprimer HEX 1A en fin de fichier
[serveur dédié] cmt prendre en compte les modifs du fichier de conf?Modification d'un fichier vbscript
[ASP] Lecture dans un fichier texte[Résolu]Utiliser une fonction dans un fichier PHP
Plus de sujets relatifs à : Comment acceder un fichier en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR