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 :

Problème écriture fichier avec FILE


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Points : 19
    Points
    19
    Par défaut Problème écriture fichier avec FILE
    Bonjour à tous,

    Je suis en train de réaliser un speudo-compilateur et donc j'écris dans des fichiers.
    Actuellement j'utilise cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    bool write_in_file(char* filename, char* text)
    {
        FILE *thefile;
        thefile = fopen(filename, "a+");
        if (thefile == NULL)
        {
            return false;
        } else {
            fprintf(thefile, text);
            fclose(thefile);
        }
        return true;
    }
    elle fonctionne parfaitement mais mon problème c'est que je n'écris pas tout d'un seul coup dans le fichier, du coup, il s'ouvre, se ferme, se réouvre, se referme...
    J'ai donc créée une autre fonction:
    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
    37
    38
     
    char* oldfile = "";
    FILE *filetowrite = NULL;
     
    bool write_in_file(char* filename, char* text)
    {
        if (strcmp(filename, oldfile) != 0)
        { 
            if (filetowrite != NULL)
            {
                printf("Close file !!!\n"); 
                fclose(filetowrite);
                oldfile = filename;
            } else {
                oldfile = filename;
            }
        }
     
        if (filetowrite == NULL)
        {
            printf("Open file !!!\n");
            filetowrite = fopen(filename, "a");
            oldfile = filename;
            if (filetowrite == NULL)
            {
                return false;
            }
        }
     
        printf("Write in file !!!\n");
        fprintf(filetowrite, text);
     
     
        printf("Filename: %s\n", filename);
        printf("Oldfile: %s\n", oldfile);
     
        return true;
    }
    qui me laisse le fichier ouvert et écrit dedans, du moins il fait semblant, car si les printf sont corrects, il écrit juste une fois dans un fichier puis plus rien (dans le fichier courant ou dans les autres) !

    Ma question est donc, peut-on laisser un FILE ouvert comme je le fais ?
    Voyez-vous un problème dans mes "if" ?

    Je vous remercie d'avance pour vos réponses,
    Cordialement,
    Nicolas.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    Tu peut tout a fait ouvrir un FILE * et le fermer à la fin de ton programme. Cependant il serait je pense plus judicieux d'utiliser fwrite plutot que fprintf.

  3. #3
    Membre éprouvé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 499
    Points : 1 005
    Points
    1 005
    Par défaut
    Bonjour à tous.

    Chez moi cela fonctionne correctement. J'écris 20 fois dans le fichier et mes 20 écritures sont présentes.

    Il faudrait que tu donne plus d'info sur le code qui appelle ta fonction write_in_file.

    As tu penser à fermer ton fichier avant de quitter l'application.
    Voyez-vous un problème dans mes "if" ?
    je dirais oui.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        if (strcmp(filename, oldfile) != 0)
        { 
            if (filetowrite != NULL)
            {
                printf("Close file !!!\n"); 
                fclose(filetowrite);
                oldfile = filename;
            } else {
                oldfile = filename;
            }
        }
    deviendrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        if (strcmp(filename, oldfile) != 0)
        { 
            if (filetowrite != NULL)
            {
                printf("Close file !!!\n"); 
                fclose(filetowrite);
                oldfile = filename;
                filetowrite = NULL;    // <-- ligne manquante
            } else {
                oldfile = filename;
            }
        }
    car le fclose ne mettra pas ton pointeur à NULL

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Merci pour vos réponses.

    Effectivement en mettant:
    cela fonctionne parfaitement !

    Cordialement,
    Nicolas.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2010, 20h01
  2. Problème écriture fichier xml
    Par ludo24 dans le forum ASP
    Réponses: 23
    Dernier message: 23/06/2008, 11h48
  3. Problème lecture fichier avec >>
    Par C1rcus dans le forum C++
    Réponses: 2
    Dernier message: 18/11/2007, 18h19
  4. Problème recup fichiers avec Easy recovery 6 pro
    Par poney01 dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 16/05/2007, 15h00
  5. [Servlet] Probléme écriture fichier
    Par hedgehog dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 23/05/2005, 15h17

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