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

  FORUM HardWare.fr
  Programmation
  C

  Ma fonction doit-elle retourner un pointeur de fichier ou un entier ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ma fonction doit-elle retourner un pointeur de fichier ou un entier ?

n°1732973
koskoz
They see me trollin they hatin
Posté le 16-05-2008 à 23:51:14  profilanswer
 

Salut tout le monde,
je suis en train de développer une petite application qui nécessite de manipuler des fichiers.
 
Pour n'avoir à ouvrir mes fichiers qu'une seule fois, je passe par une fonction "chargement_fichier" qui charge mon fichier dans un pointeur de type FILE et qui retourne 0 ou 1 en fonction de l'ouverture ou non du fichier.
 
Là où je coince un peu, c'est avec la manipulation de mon pointeur fichier.
Etant déclaré en local de ma fonction (FILE *fichier) c'est un pointeur qui pointe vers le contenu de fichier si je ne dis pas de bêtises.
 
Par contre je ne sais pas trop comment le manipuler en dehors de cette fonction.
En effet, mes autres fonctions prennent en paramètre ce fichier (pour ne pas devoir le ré ouvrir à chaque fois).
 
Le problème, c'est que je ne suis déjà pas sûr de comment déclarer l'entête de mes autres fonction.  
Je dois remettre FILE *fichier ? Est-ce que ça va manipuler le même pointeur que celui de ma fonction "chargement_fichier" ?
Lorsque je vais appeler une fonction, l'appel se fera ainsi : ma_fonction(paramètre, &fichier). Je dois donc définir un pointeur de fichier pour appeler ma fonction ?
 
Je ne sais pas si j'ai été très clair, mais ça reste confus pour moi aussi :/
Merci d'avance pour l'aide.
 


---------------
Twitter
mood
Publicité
Posté le 16-05-2008 à 23:51:14  profilanswer
 

n°1732979
jesus_chri​st
votre nouveau dieu
Posté le 17-05-2008 à 00:17:55  profilanswer
 

tu peux renvoyer un FILE* créé dans une fonction. Pas de problème pour renvoyer des pointeurs. D'ailleurs c'est ce que fait fopen().

n°1732982
dap++
Script kiddie
Posté le 17-05-2008 à 00:19:52  profilanswer
 

koskoz a écrit :

Là où je coince un peu, c'est avec la manipulation de mon pointeur fichier.
Etant déclaré en local de ma fonction (FILE *fichier) c'est un pointeur qui pointe vers le contenu de fichier si je ne dis pas de bêtises.


C'est un pointeur vers une structure qui décrit le fichier et qui est utilisée par les fonctions comme fopen() et fclose() pour le manipuler.
 

koskoz a écrit :

Le problème, c'est que je ne suis déjà pas sûr de comment déclarer l'entête de mes autres fonction.  
Je dois remettre FILE *fichier ? Est-ce que ça va manipuler le même pointeur que celui de ma fonction "chargement_fichier" ?
Lorsque je vais appeler une fonction, l'appel se fera ainsi : ma_fonction(paramètre, &fichier). Je dois donc définir un pointeur de fichier pour appeler ma fonction ?


Ta fonction retournera l'adresse d'une structure FILE donc tant que l'adresse sera valide (jusqu'au fclose()) il n'y aura pas de problème. C'est avec les variables locales qu'il faut faire attention, elles ne sont plus utilisables en dehors du bloc où elles ont été définies.
Par exemple ce code a l'air de fonctionner :

Code :
  1. #include <stdio.h>
  2. FILE* chargement_fichier (char const *nom);
  3. void faire_des_trucs_sur_le_fichier (FILE *p_fichier);
  4. int main (void)
  5. {
  6.    FILE *p_fichier = chargement_fichier ("essai.txt" );
  7.  
  8.    if (p_fichier != NULL)
  9.    {
  10.       faire_des_trucs_sur_le_fichier (p_fichier);
  11.       fclose (p_fichier);
  12.    }
  13.    return 0;
  14. }
  15. FILE *chargement_fichier (char const *nom)
  16. {
  17.    return fopen (nom, "w" );
  18. }
  19. void faire_des_trucs_sur_le_fichier (FILE *p_fichier)
  20. {
  21.    fputs ("test\n", p_fichier);
  22. }


---------------
dap.developpez.com
n°1733006
Trap D
Posté le 17-05-2008 à 09:03:31  profilanswer
 

Je ne vois pas trop l'intérêt de la fonction FILE *chargement_fichier (char const *nom) ?!

n°1733019
Taz
bisounours-codeur
Posté le 17-05-2008 à 10:32:08  profilanswer
 

bah si elle fait juste que fopen c'est sur

n°1733033
koskoz
They see me trollin they hatin
Posté le 17-05-2008 à 11:49:34  profilanswer
 

C'est pas mieux d'ouvrir le fichier une seule fois pour toute ?
D'après vous, si je l'ouvre une fois par fonction ça n'a pas d'importances ?


---------------
Twitter
n°1733082
Taz
bisounours-codeur
Posté le 17-05-2008 à 13:50:25  profilanswer
 

oui c'est idiot

n°1733085
koskoz
They see me trollin they hatin
Posté le 17-05-2008 à 14:03:10  profilanswer
 

Idiot de l'ouvrir plusieurs fois ou de l'ouvrir qu'une seule fois.


---------------
Twitter
n°1733169
Trap D
Posté le 17-05-2008 à 20:57:30  profilanswer
 

Ça dépend de l'utilisation du fichier, est-ce uniquement un fichier qui contient des données destinées à être lues ou autre chose, est-il mis à jour régulièrement ?  
Quelles sont les conséquences s'il y a un crash et que les données sont endommagées.

n°1733171
koskoz
They see me trollin they hatin
Posté le 17-05-2008 à 21:03:53  profilanswer
 

Le fichier est destiné à être lu pour stocker ses données dans un tableau, c'est tout.
C'était juste pour éviter la redondance de code.


---------------
Twitter
mood
Publicité
Posté le 17-05-2008 à 21:03:53  profilanswer
 

n°1733282
Trap D
Posté le 18-05-2008 à 11:00:02  profilanswer
 

Dans ce cas tu peux le garder ouvert et trimballer ta variable au gré des fonctions du programme (les variables globales c'est pas beau, mis dans ce cas précis, ça pourrait être envisagé !)

n°1733640
koskoz
They see me trollin they hatin
Posté le 19-05-2008 à 12:51:18  profilanswer
 

Et si le fichier ne s'ouvre pas, je retourne quoi ?


---------------
Twitter
n°1733654
Trap D
Posté le 19-05-2008 à 13:09:19  profilanswer
 

Ta fonction retourne NULL (enfin le fopen), à toi de traiter ce cas dans ton programme.

n°1733668
koskoz
They see me trollin they hatin
Posté le 19-05-2008 à 13:23:38  profilanswer
 

Oui, ça je sais, mais comme ma fonction retourne un pointeur de fichier, en cas de non ouverture de fichier je ne sais pas ce qu'elle doit retourner vu que NULL n'est pas accepté.


---------------
Twitter
n°1733795
Trap D
Posté le 19-05-2008 à 15:45:37  profilanswer
 

En se basant sur ceci

Code :
  1. FILE *chargement_fichier (char const *nom)
  2. {
  3.    return fopen (nom, "w" );
  4. }

ta fonction retourne NULL non ?
Je ne comprends pas exactement ce que tu veux dire par  

Citation :

en cas de non ouverture de fichier je ne sais pas ce qu'elle doit retourner vu que NULL n'est pas accepté.


Au fait

Citation :

Le fichier est destiné à être lu pour stocker ses données dans un tableau, c'est tout.

Le fichier doit être lu et tu l'ouvres en écriture ???


Message édité par Trap D le 19-05-2008 à 15:47:35
n°1733799
koskoz
They see me trollin they hatin
Posté le 19-05-2008 à 15:53:34  profilanswer
 

C'est pas mon code, c'est celui de dap.
 
Enfin après reflexion, ma fonction sert à rien vu que si je fais bien les choses, je ne devrai ouvrir le fichier qu'une seule fois.


---------------
Twitter
n°1733813
Taz
bisounours-codeur
Posté le 19-05-2008 à 16:18:41  profilanswer
 

Une fonction chargement_fichier d'1 ligne qui ne charge pas le fichier, mais l'ouvre en écriture/troncature, c'est un très bon nom.

n°1733928
koskoz
They see me trollin they hatin
Posté le 19-05-2008 à 17:51:18  profilanswer
 

Je sais pas trop de quoi tu parles vu que je n'ai donné aucun bout de code.


---------------
Twitter
n°1736659
el muchach​o
Comfortably Numb
Posté le 24-05-2008 à 18:28:11  profilanswer
 

Il parle du code proposé par Dap++


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1736668
dap++
Script kiddie
Posté le 24-05-2008 à 18:55:55  profilanswer
 

C'était pour montrer un exemple de fonction qui retourne un FILE* à partir de ce que koskoz avait dit sur son problème, après il en fait ce qu'il veut. :)


---------------
dap.developpez.com

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

  Ma fonction doit-elle retourner un pointeur de fichier ou un entier ?

 

Sujets relatifs
[VB / EXCEL] Lecture d'un fichier texte en partant de la fin ?Batch Linux, trouver un fichier, se déplacer dans le répertoire et exe
[Struts] Validator: vérification d'un entier invalidelecture d'un fichier wav en C
Affichage d'un fichier texte sur une page en PHP[Résolu] Fonction php déclencé par un bouton
[Tasm]lire 2 entier d'un fichier et faire une aditionSimple lecture de fichier... [ RESOLU ]
envoyer référence a monObjet.addEventListener() à la fonction invoquée 
Plus de sujets relatifs à : Ma fonction doit-elle retourner un pointeur de fichier ou un entier ?


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