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 :

Comment vider un fichier avec option r+


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut Comment vider un fichier avec option r+
    Bonjour à tous,

    Voilà j ai une petite questiojn sur un fichier dans lequel j ecris des mots dedans.

    Si ce fichier n a comme option juste "w" (ecriture) a chaque fois que je relance mon programme, il se remplis et vide le texte precedent.( ce qui me va completement)

    Maintanant si je lui donne comme option "r+" (lecture ecriture) car je souhaiterais afficher de temps à temps son contenu dans la console, le fichier ne vide plus les textes precedent et ca c est dommage.(pour moi bien sur)

    Existe il une fonction qui avant chaque reecriture dans le fichier me vide les données precedentes.

    Merci par avance

    Shaz
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je suppose qu'il faut deviner que tu ouvres ce fichier avec la fonction fopen()

    essaye avec l'option "w+" (voir le man de fopen)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonsoir ram-0000,

    Oui effectivement je l ouvre avec la fonction fopen() (il ya t il d autres façon d ouvrir un fichier ?).

    En tous les cas ca marche avec w+, mais je n arrive pas a l afficher dans la console.

    voila le code que j emploi pour y arriver:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      char chaine[TAILLE_MAX] = "";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      if( fichier2 != NULL)
    {
           fgets(chaine, TAILLE_MAX, fichier2);
            printf("%s", chaine); 
     
            fclose(fichier2);
     }
    Il y a t il peut etre une erreur?

    Cordialement

    Shaz
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  4. #4
    Membre averti Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Points : 382
    Points
    382
    Par défaut
    si tu n'a plus besoin des donnees efface le fichier et utilise fopen en mode r+ sa va le recreer vide .

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par shazad Voir le message
    Oui effectivement je l ouvre avec la fonction fopen() (il ya t il d autres façon d ouvrir un fichier ?).
    Oui, open() par exemple
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonjour à tous,

    Et merci pour vos reponses.

    J ai essayer donc avec l option "w+" mais je n arrive pas à le lire.
    Il faut reelement qu il soit avec l option "w" pour que mon programme y ecrit à l interieur, mais alors pour le lire une fois le traitement fait; il est peut etre impossible de le lire dans la console. (?????)

    Merci par avance
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  7. #7
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Quand tu ouvres un fichier en mode "w+", le fichier redevient vierge (il ne contient rien), tout comme si tu l'avit ouvert en mode "w". La différence avec "w", c'est qu'en "w+" tu peux aussi bien écrire (autorisé en mode "w") que lire (interdit en mode "w") dans le fichier. Il y a cependant certaines précautions à prendre :

    - avant d'effectuer une opération de lecture juste après une opération d'écriture, il faut tout d'abord appeler fflush ou une fonction de positionnement

    - avant d'effectuer une opération d'écriture juste après une opération de lecture, il faut d'abord appeler une fonction de positionnement, à moins d'avoir atteint la fin du fichier

    Si le problème persiste, poste ton code (complet).

  8. #8
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonsoir Melem,

    Merci pour tous tes renseignement, j affiche le code car même en cherchant comment utiliser la fonction fflush() je n arrive pas à afficher le mot du fichier texte:
    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
     
     FILE *fichier1 = fopen ("/home/shazad/FicherDeReception.txt","w+");
        char mot1[] = "Resultat";
        char mot2[] = "Resultat";
        char ligne[TAILLE] = "";
     
             if (strcmp(mot1, mot2) == 0)
        {
            printf("Les mots sont identiques\n");
            fputs(mot2, fichier1);
        }
        else
        {
            printf("Les mots sont differents\n");
        }
     
          fflush(fichier1);
          if (fichier1 != NULL)
        {
     
            fgets(ligne, TAILLE, fichier1); 
            printf("%s", ligne); 
     
            fclose(fichier1);
        }
    Je te remercis par avance pour ton aide.

    Shaz
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est normal, c'est ta logique qui a une faille:
    Comment peux-tu à la fois vider un fichier lors de l'ouverture et conserver son contenu?

    Tu ne dois tronquer le fichier qu'après y avoir écrit à nouveau, et j'ignore si c'est possible en standard. Donc, la seule solution standard qu'il te reste, c'est de procéder en deux étapes: Ouverture en lecture, Lecture, Fermeture, puis Ouverture en écriture pour écrasement.
    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.

  10. #10
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut Reponse à Medinoc
    Bonsoir,

    Je crois que je me suis mal expliqué, je vais essayer de dire ligne par ligne ce que j aurai souhaitez:

    -Lancer mon programme.
    -Remplir le fichier dans le cas de 2 mots identiques.
    -Lire le fichier dans la console (ce que je pourrais tres bien faire dans mon navigateur de fichiers).
    -Relancer mon programme et le remplir par 2 nouveaux mots identiques en ecrasant les precedents mots.
    -Pouvoir afficher les 2 nouveaux mots identiques dans la console. etc etc etc....

    Alors bien sur le code que j ai afficher ne compare que 2 mots, mais dans le cas ou j aurais souhaiter faire un code qui stock plusieurs mots selon un critere quelconque, la console m aurait servi d un moyen rapide de visualisation de ces mots.

    Pour resumé: lire un fichier dans lequel a chaque lancement du programme des mots differents sont stockés en ecrasant les precedents.

    Une fois de plus bien sur , il y a le navigateur de fichier , je me prends peut etre un peu la tete pour rien.

    Cordialement.

    Shaz
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  11. #11
    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 shazad Voir le message
    Pour résumer: lire un fichier dans lequel a chaque lancement du programme des mots différents sont stockés en écrasant les précédents.
    Pour lire : "r"
    pour écrire : "w".
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonsoir Emmanuel,

    Veus tu dire Emmanuel qu un fichier pendant le deroulement d un programme peut changer d' options ou bien l option est definie au depart et on ne peus plus en changer.

    Shaz.
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  13. #13
    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 shazad Voir le message
    Veus tu dire Emmanuel qu un fichier pendant le deroulement d un programme peut changer d' options ou bien l option est definie au depart et on ne peus plus en changer.
    Le mode d'ouverture est défini jusqu'au fclose(). Après on peut ouvrir le fichier à nouveau dans un autre mode.

    (on peut aussi le changer sans fclose() avec freopen() ...)
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonjour Emmanuel,

    Voilà j ai beau chercher sur le net la façon de me servir de freopen pour mon exemple mais je n arrive pas a le placer. Faut il le declarer au debut du programme ?

    J ai fait ceci mais ca ne fonctionne pas:

    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
      FILE *fichier1 = fopen ("/home/shazad/FicherDeReception.txt","w+");
        char mot1[] = "Resultat";
        char mot2[] = "Resultat";
        char ligne[TAILLE] = "";
     
             if (strcmp(mot1, mot2) == 0)
        {
            printf("Les mots sont identiques\n");
            fputs(mot2, fichier1);
        }
        else
        {
            printf("Les mots sont differents\n");
        }
     
          freopen("/home/shazad/FichierDeReception.txt","r",stdout);
          if (fichier1 != NULL)
        {
     
            fgets(ligne, TAILLE, fichier1); 
            printf("%s", ligne); 
     
            fclose(fichier1);
        }
    Merci par avance
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  15. #15
    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 shazad Voir le message
    Voilà j ai beau chercher sur le net la façon de me servir de freopen pour mon exemple mais je n arrive pas a le placer. Faut il le declarer au debut du programme ?
    http://man.developpez.com/man3/fopen.3.php
    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
     
    int main (void)
    {
       FILE *fichier1 = fopen ("fichier.txt", "w");
       if (fichier1 != NULL)
       {
          char mot1[] = "Resultat";
          char mot2[] = "Resultat";
     
          if (strcmp (mot1, mot2) == 0)
          {
             printf ("Les mots sont identiques\n");
             fputs (mot2, fichier1);
          }
          else
          {
             printf ("Les mots sont differents\n");
          }
     
          fichier1 = freopen ("fichier.txt", "r", fichier1);
          if (fichier1 != NULL)
          {
             char ligne[128] = "";
             fgets (ligne, sizeof ligne, fichier1);
             printf ("%s", ligne);
     
             fclose (fichier1);
          }
       }
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonsoir Emmanuel,

    Une fois de plus un grand , grand merci à toi.

    Cordialement.

    Shaz.
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/11/2006, 11h56
  2. Comment sauvegarder un fichier avec choix du repertoire
    Par vantoff dans le forum C++Builder
    Réponses: 14
    Dernier message: 24/07/2006, 15h51
  3. Comment ouvrir un fichier avec AppWIZARD
    Par orj30754 dans le forum MFC
    Réponses: 1
    Dernier message: 24/05/2006, 17h24
  4. Serveur/Client UDP: comment envoyer un fichier avec mon code
    Par danje dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/12/2005, 14h54
  5. Comment joindre un fichier avec le composant CDONT
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 31/12/2004, 17h28

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