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


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Par défaut ecriture dans un fichier qui echoue..
    Bonjour,
    voila je commence mon apprentissage du C et j'ai deja quelques soucis..
    en codant une petite boucle pour remplacer les sauts à la ligne par des virgules, mon code ne marche pas du tout, et au contraire il ne reste rien dans le fichier de test que jútilise a la fin du programme..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    FILE *fp;
    	char c;
    	if ((fp=fopen("test.txt","w"))==EOF)
    	{
    		puts("ouverture impossible");
    		return 1;
    	}
    	puts("ok..");
    	while((c=getc(fp))!=EOF)
    		if(c=='\n') 
    			putc(',',fp);
    	fclose(fp);
    Bon, je sais que c'est assez degueu comme code mais bon, la le probleme, c'est que lorsque je lui fournis un fichier test.txt avec quelque lignes, le fichier que j'ai en sortie est vide, il a donc tout effacé... why ???
    Toute aide me sera précieuse.
    merci

    mac

  2. #2
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Salut;
    Quand on ouvre un fichier avec fopen("NomFichier", "w") en ecriture, si le fichier existe le contenu sera detruit !, sinon il crée un nouveau fichier

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Attention, fopen() ne retourne pas EOF en cas d'erreur, mais NULL.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Le problème c'est surtout qu'on ne peux pas lire et écrire en même temps dans le même fichier.

  5. #5
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Il n'est pas possible d'écrire à un endroit précis d'un fichier. Selon le mode d'ouverture, tout caractère sera écrit soit au début, soit à la fin du fichier.

    Il faut que tu stockes le contenu du fichier en mémoire, que tu modifies ces données en mémoire et qu'ensuite tu réécrives complètement le fichier avec les données modifiées.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    En fait, on PEUT écrire n'importe où, mais ça écrase ce qu'il y a après, et cette méthode est déconseillée. Faire une copie, puis supprimer l'ancien, puis renommer est plus fiable, sauf s'il faut prendre en compte des trucs plus complexes (métadonnées, droits d'accès etc.) de l'original.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par macsimus Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FILE *fp;
    	char c;
    	if ((fp=fopen("test.txt","w"))==EOF)
    relis ton cours de C. en cas d'échec, fopen() retourne NULL et non EOF.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	while((c=getc(fp))!=EOF)
    		if(c=='\n') 
    			putc(',',fp);
    Tu cherches à lire un fichier ouvert en écriture. C'est absurde. Revoie ton raisonnement, il est faux. Avant tout codage, il faut faire une étude préalable qui permet de définir une méthode correcte basée sur les spécifications.
    Bon, je sais que c'est assez degueu comme code
    si tu le sais pourquoi tu n'essaye pas de faire mieux ?
    mais bon, la le probleme, c'est que lorsque je lui fournis un fichier test.txt avec quelque lignes, le fichier que j'ai en sortie est vide, il a donc tout effacé... why ???
    une ouverture en mode "w" crée un fichier vide.


    "Le problème c'est surtout qu'on ne peux pas lire et écrire en même temps dans le même fichier."

    "Il n'est pas possible d'écrire à un endroit précis d'un fichier. Selon le mode d'ouverture, tout caractère sera écrit soit au début, soit à la fin du fichier."
    Qu'est-ce qu'on peut lire comme âneries sur les forums... Si on ne sait pas, on ne dit rien ou on pose une question...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Par défaut
    buggen25
    Quand on ouvre un fichier avec fopen("NomFichier", "w") en ecriture, si le fichier existe le contenu sera detruit !, sinon il crée un nouveau fichier
    medinoc
    Attention, fopen() ne retourne pas EOF en cas d'erreur, mais NULL.
    merci, en remplacant "w" par "r+" et en ajustant avec fseek ca marche beaucoup mieux comme ca :

    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
     
    FILE *fp;
    	char c;
    	if ((fp=fopen("test.txt","r+"))==NULL)
    	{
    		puts("ouverture impossible");
    		return 1;
    	}
    	puts("ok..");
     
    	while((c=getc(fp))!=EOF)
    		if(c=='\n')
    		{ 
    			fseek(fp,-1,SEEK_CUR);
    			putc(',',fp);
    		}
     
    	fclose(fp);
    et merci aussi à Mr. Delahaye, qui malgré un ton assez peu avenant résume bien la situation..
    Bisous

    Mac

  9. #9
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Citation Envoyé par macsimus Voir le message
    et merci aussi à Mr. Delahaye, qui malgré un ton assez peu avenant résume bien la situation..
    Oui Emmanuel est un peu direct mais il a l'expérience avec lui donc on peut trop rien dire sinon merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/07/2011, 09h07
  2. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48
  3. 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
  4. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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