IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Ecriture dans un fichier txt : le texte n'apparaît qu'à la fin de l'éxécution du main


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Ecriture dans un fichier txt : le texte n'apparaît qu'à la fin de l'éxécution du main
    Bonjour,
    Je débute en C et je suis confrontée à un problème lors de l'écriture dans un fichier texte grâce à mon programme en C.

    J'ai constaté que le texte écrit grâce à la fonction fprintf est réellement écrit dans le fichier non pas lors de l'appel de cette méthode, mais à la fin de l'exécution du main.

    Je ne comprends pas à quoi c'est dû et cela me pose problème car je souhaite d'abord écrire dans mon fichier, puis récupérer les données écrites afin de les utiliser dans une autre fonction, mais je ne peux pas puisque lorsque j'essaye de lire mon fichier .txt il est encore vide (fin du main non atteinte).

    Voici mon code (je travaille sous linux d'où le chemin d'accès pour le fichier .txt à créer).
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #include<stdlib.h>
    #include<stdio.h>
     
    // Ecriture dans le fichier
    write(char* pChemin,char* pText){
    	FILE *pFichier=fopen(pChemin,"w");
    	if(pFichier){
    	fprintf(pFichier,"%s \n",pText); 
    	}
    	else{
    	printf("méthode write : problème à l'ouverture du fichier. Vérifiez que le chemin d'accès indiqué l33 est correct \n");
    	}
    	close(pFichier);
    }
     
    // Main
    int main (int argc, char *argv[]) {
     
    	// Texte à écrire
    	char* pText="blablabla";
     
    	// Chemin du fichier à créer dans lequel on souhaite écrire le texte
    	char* pChemin="/home/nina/Bureau/fichier.txt";
     
    	// Appel à la fonction d'écriture
    	write(pChemin,pText);
     
    	// Vérification
    	printf("Vérifier que le fichier a bien été créé mais qu'il est vide, puis taper sur n'importe quelle touche puis entrée pour continuer \n");
    	int a;
    	scanf("%u",&a);
     
    	printf("Fin du programme. Rouvrez le fichier : il contient la chaine de caracètres voulue. \n");
     
    }
    Merci d'avance pour votre aide!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Points : 38
    Points
    38
    Par défaut
    Une petite question,
    tu as besoin de reutiliser les donnees ecrites pour une autre fonction ok.

    C'est pas mieux de stocker ces donnees puis de les passer directement a ta fonction ?

    Je ne suis pas sur de l'interet de re scan un fichier dans lequel tu as ecrit des donnees provenant d'un buffer, pour les remettre dans un autre buffer.

    Autant stock ton buffer et le passer directement a ta fonction ...

    Concernant le moment ou l'ecriture dans le fichier se fait, je ne peux pas t'aider.
    Essaye de faire un fclose(file) apres ton ecriture. meme si tu devrais reouvrir par la suite, peut etre ca peut forcer l'ecriture, a voir.

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Je viens de me rendre compte grâce à votre réponse que j'ai fait une erreur stupide : j'ai utilisé close(pFichier) au lieu de fclose(pFichier)! Le flux de données n'était donc pas fermé et il était logique que les données ne s'inscrivent pas.

    Par ailleurs il m'est nécessaire de stocker les données dans un fichier car je souhaite que l'utilisateur puisse créer une playlist (en choisissant parmis des musiques proposées) et que cette playlist soit conservée dans un fichier afin de pouvoir être rechargée lors d'une prochaine utilisation.

    Merci de votre réponse, ça faisait un petit moment que je tournais en rond !

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Et ce n'est pas le dernier bug de la sorte que tu rencontreras dans ta vie !
    Bravo pour ta persévérance, en tout cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecriture dans un fichier txt
    Par ENSAM-ALAMI dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/05/2008, 16h46
  2. Ecriture dans un fichier .txt
    Par aquarius85 dans le forum MATLAB
    Réponses: 5
    Dernier message: 03/03/2008, 08h28
  3. ecriture dans un fichier txt
    Par warubi dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/06/2007, 11h07
  4. Réponses: 8
    Dernier message: 07/09/2006, 11h43
  5. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo