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 :

Ecrire dans un fichier


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Ecrire dans un fichier
    Bonjour,

    j'aurais besoin d'une aide concernant ceci.

    Je compile mon programme.
    Puis je tape des lignes qui permettent de faire fonctionner le programme.
    Je voudrais savoir comment faire pour recopier dans un fichier ce qui a ete tape(il faut recopier les lignes telles quelles,s'il y a des espaces,il faut les recopier dans le fichier,... )?

    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    man fgetc
    man fputc
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Est ce que c'est de cette maniere qu'il faut faire?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int Sauvegarde(char *nom)
    {
    char buf[256];
    FILE *f = fopen(nom,"w");
    if(f == NULL)
    return 1;
    if(f != NULL)
    {
    while(fgets(buf,sizeof(buf),stdin)!=NULL)
    fprintf(f,"%s",buf);
    }
    fclose(f);
    return 0;
    }

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Oui cela m'a l'air correct, pourquoi ne pas simplement le tester et voir si cela fonctionne?

    Par contre, tu pourrais commencer à indenter ton code, ce serait plus lisible...

    Et ce test est inutile:

    Vu que tu as fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(f == NULL)
        return 1;
    Jc

    PS: Tu pourrais à la limite tester si nom!=NULL, mais c'est une préférence personnelle...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Man_Utd
    Est ce que c'est de cette maniere qu'il faut faire?
    Apprends à indenter ton code. C'est illisible... Sinon, c'est à peu près ça. Mieux vaut poster du code complet, compilable et testable...
    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
     
    #include <stdio.h>
     
    int Sauvegarde(char *nom)
    {
       int err = 0;
       FILE *f = fopen(nom, "w");
     
       if (f != NULL)
       {
          char buf[256];
          while (fgets(buf, sizeof buf, stdin) != NULL)
          {
             fprintf(f, "%s", buf);
    /* -ed- EDIT
             fflush (f);
        precaution inutile... Je le retire.
    */
          }
          fclose(f);
       }
       else
       {
          err = 1;
       }
       return err;
    }
     
    int main (void)
    {
       Sauvegarde ("xxx");
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Man_Utd
    Est ce que c'est de cette maniere qu'il faut faire?
    Apprends à indenter ton code. C'est illisible... Sinon, c'est à peu près ça. Mieux vaut poster du code complet, compilable et testable...
    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
     
    #include <stdio.h>
     
    int Sauvegarde(char *nom)
    {
       int err = 0;
       FILE *f = fopen(nom, "w");
     
       if (f != NULL)
       {
          char buf[256];
          while (fgets(buf, sizeof buf, stdin) != NULL)
          {
             fprintf(f, "%s", buf);
             fflush (f);
          }
          fclose(f);
       }
       else
       {
          err = 1;
       }
       return err;
    }
     
    int main (void)
    {
       Sauvegarde ("xxx");
       return 0;
    }
    Merci.
    Est ce que tu pourrais m'indiquer à quoi sert cette fonction car je ne connais pas?

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    De la page man de fflush:

    La fonction fflush force l'écriture de toutes les données se trouvant dans les buffers de l'espace utilisateur, et met à jour le flux à travers la fonction sous-jacente d'écriture. Le statut d'ouverture du flux n'est pas affecté.

    Si l'argument flux est NULL, fflush vide tous les flux en sortie.

    D'après la page man de fclose:

    toutes les donnèes contenues dans le buffer sont d'abord écrites, en utilisant fflush
    Est-ce donc nécessaire de le faire dans le code?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par fearyourself
    De la page man de fflush:

    La fonction fflush force l'écriture de toutes les données se trouvant dans les buffers de l'espace utilisateur, et met à jour le flux à travers la fonction sous-jacente d'écriture. Le statut d'ouverture du flux n'est pas affecté.

    Si l'argument flux est NULL, fflush vide tous les flux en sortie.

    D'après la page man de fclose:

    toutes les donnèes contenues dans le buffer sont d'abord écrites, en utilisant fflush
    Est-ce donc nécessaire de le faire dans le code?
    Admettons que ce soit ici une précaution inutile.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut
    Ce que man n'explique pas, c'est en quoi fflush() est nécessaire voire
    simplement utile, puisque même quand cette fonction n'est pas utilisée,
    les données finissent par être écrites

    En d'autres termes, à quoi sert-il que les données soient IMMEDIATEMENT
    écrites.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par HRS
    Ce que man n'explique pas, c'est en quoi fflush() est nécessaire voire
    simplement utile, puisque même quand cette fonction n'est pas utilisée,
    les données finissent par être écrites

    En d'autres termes, à quoi sert-il que les données soient IMMEDIATEMENT
    écrites.
    Problème de sécurité ?
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Pour debugger c'est beaucoup plus simple d'écrire directement les données.

  12. #12
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    bonjour,
    je crois bien que si les données s'ecrivent parfois instantanément alors qu'on ne l'avait pas demander c'est a cause de certains caracteres qui vide le buffer notement '\n' et '\r\n'.

    c'est pourquoi vider le buffer est conseiller avant la fin des operations.
    "vaste programme"

Discussions similaires

  1. Ecrire \" dans un fichier
    Par photorelief dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2005, 15h56
  2. [JAR] Lire et Ecrire dans un fichier contenu dans un jar
    Par lipao17 dans le forum Général Java
    Réponses: 5
    Dernier message: 02/05/2005, 12h01
  3. Ecrire dans un fichier
    Par gibet_b dans le forum Linux
    Réponses: 5
    Dernier message: 25/04/2005, 20h11
  4. Ecrire dans un fichier grace à un trigger ?
    Par zigoo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/10/2004, 20h03
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 15h44

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