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 :

Ouvrir un fichier texte en lecture ET écriture


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Ouvrir un fichier texte en lecture ET écriture
    Bonjour,
    C'est pourtant tout simple, je souhaite ouvrir un fichier en lecture ET en écriture, j'utilise fopen en passant le mode r+ (read and write avec fichier existant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fopen (C:\Toto.txt, "r+");
    Je les ai tous essayé mais je n'arrive pas à ouvrir mon fichier en lecture ET en écriture en même temps,
    la lecture fonctionne si je mets le mode r, et l'écriture focntionne si je mets w mais impossible d'avoir les deux en même temps.
    J'ai essayé : r+ ; a+ ; w+ ... et ça ne fonctionne pas

    Qu'est qui peut bien se passer ?

    Merci pour votre coup de main

    Steph

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Là tu codes en C.
    Pour le C, les mode "r+", "w+" et "a" devraient fonctionner, tu te positionnes dans le fichier avec des fseek.
    Vas voir ici
    Pour le C++, il y a ara sans doute une bonne âme pour t'expliquer.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut Re: Ouvrir un fichier texte en lecture ET écriture
    Bonjour,
    Citation Envoyé par Steph12
    Bonjour,
    C'est pourtant tout simple, je souhaite ouvrir un fichier en lecture ET en écriture, j'utilise fopen en passant le mode r+ (read and write avec fichier existant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fopen (C:\Toto.txt, "r+");
    Je les ai tous essayé mais je n'arrive pas à ouvrir mon fichier en lecture ET en écriture en même temps,
    la lecture fonctionne si je mets le mode r, et l'écriture focntionne si je mets w mais impossible d'avoir les deux en même temps.
    J'ai essayé : r+ ; a+ ; w+ ... et ça ne fonctionne pas

    Qu'est qui peut bien se passer ?

    Merci pour votre coup de main

    Steph
    C'est la bonne syntaxe et ça marche, quel est le code de retour de fopen ?

    Es-tu sûr que le fichier existe avec le chemin spécifié?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Je viens de voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fopen (C:\Toto.txt, "r+"); ?????
    Il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FILE *f = fopen("c:\\toto.txt", "r+");
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En C++ on n'utilise plus ces fonctions héritées du C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <fstream>
     
    std::fstream fichier("toto.txt", std::ios_base::in | std::ios_base::out);
     
    int x;
     
    // Lecture
    fichier >> x;
     
    // Ecriture
    fichier << x;

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    c'est juste mon exemple qui n'est pas bon mais j'écris bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fopen("c:\\toto.txt", "r+");
    le code de retour est toujours ok, du moins j'ai toujours un pointeur sur FILE valide, la seul chose est que lorsque je suis en lecture ET écriture, j'arrive à lire mais je ne peux pas écrire dedans, le contenu de mon fichier reste inchangé .... j'avoue que c'est un peu pénible ... et je ne vois pas ou est l'erreur ...

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Fais-tu un fflush(f); après l'écriture et te repositionnes-tu à l'endroit où tu as écrit ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    ça ne change rien malheureusement
    voici mon code peut-être que vous pourrez m'aider :
    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
    CString str_NumLine;
    int numread;
    char c[1];
    int i = 0;
     
    f = fopen("C:\\Temp\\Word\\InputFile.txt","r+");
     
    // search NumWord !
    do
    {
       numread  = fread (c, sizeof (char), 1, f);
     
       if (c[0] != '=')
       {
           str_NumLine.Insert (i, c[0]);
           i++;
       }
    }while ( str_NumLine.Compare ("NumWord ") != 0 && numread != 0 );
     
    fflush (f);
    fwrite ("s", sizeof (char),1,f);
    //	fputs ("s",f);
    fclose (f);
    Merci à vous

  9. #9
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Il faudrait aussi savoir ce qu'il y a d'écrit dans le fichier txt
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  10. #10
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut
    Ces toujour bon de tester si l'ouverture du fichier ces execute avec succes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    FILE* f;
     
    if((f = fopen("C:\\Temp\\Word\\InputFile.txt","r+")==NULL)
    {
            //erreur a l'ouverture du fichier ...
     
    }
    else
    {
    ...
    }

  11. #11
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Tu mélanges allègrement MFC il me semble avec les CString et le C "de base"
    D'autre part, le fread est plutôt utilisé avec des ouvertures en binaire ("r+b" mais bon !)
    Que cherches-tu à faire exactement ??
    Es-tu sûr que "str_NumLine.Insert (i, c[0]); " fasse exactement ce que tu penses (à savoir initialiser progressivement ta chaîne avec ce que tu lis dans le fichier) alors que tu ne l'initialises pas à "" au démarrage.
    D'autre part "fflush(f);" se fait après une écriture dans le fichier, pas une lecture.
    Aussi, tu ne testes pas l'ouverture du fchier comme te le fais remarquer philippe V
    Bref, il faudrait peut être changer de méthode et faire soit du C soit du C++.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  12. #12
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Pour répondre à toutes vos questions :
    Oui, je mélange le C en utilisant fopen et le C+ en utilisant CString, mais rien n'empêche cela au contraire ... pourquoi pas !! je me trompe ?
    Sinon, je teste bien sur le retour de mon fopen mais je ne l'ai pas mis dans l'exemple pour alléger l'exemple .. aller à l'essentiel ...
    Sinon, j'utilise maintenant le CFile avec le mode CFile::modeReadWrite et ça fonctionne très bien ... donc ... est-ce un problème entre le C et le C++ ??? je ne pense pas mais bon ... on ne sait jamais ....
    Merci encore à tous et bonne route à vous

  13. #13
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Citation Envoyé par Steph12
    Pour répondre à toutes vos questions :
    Oui, je mélange le C en utilisant fopen et le C+ en utilisant CString, mais rien n'empêche cela au contraire ... pourquoi pas !! je me trompe ?
    Non, Bjarne stroutrup lme créateur du C++ a voulu un nouveau lanage sur-ensemble du C. Donc la sdyntaxe du C à de très rare execption ets supportée par le C++.

    Mais beaucoup de "puristes" sans être péjoratif pour eux, dans les deux langages, ne veulent pas qu'il y ait de mélange. Je dirais même qu'il est possible d'importer du C++ dans du C

    J'ai déjà fait ce genre de mélange plusieurs fois, ça fonctionne très bien. Utiliser un fopen avec un compilateur C++ ne suffit pas à expliquer l'anomalie.

    Citation Envoyé par Steph12
    Sinon, je teste bien sur le retour de mon fopen mais je ne l'ai pas mis dans l'exemple pour alléger l'exemple .. aller à l'essentiel ...
    Peut être que l'erreur provient du code "allégé" justement

    Citation Envoyé par Steph12
    Sinon, j'utilise maintenant le CFile avec le mode CFile::modeReadWrite et ça fonctionne très bien ... donc ... est-ce un problème entre le C et le C++ ??? je ne pense pas mais bon ... on ne sait jamais ....
    Merci encore à tous et bonne route à vous
    CFile, c'est un MCF non ?

    Bon courage.

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

Discussions similaires

  1. [VB6] Ouvrir un fichier text qui ce trouve sur internet!
    Par passicon dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 03/04/2006, 13h41
  2. Ouvrir un fichier texte
    Par Meno14 dans le forum Access
    Réponses: 5
    Dernier message: 28/03/2006, 17h37
  3. Réponses: 4
    Dernier message: 02/03/2006, 16h43
  4. [C++] Menu d'aide: ouvrir un fichier texte
    Par debutanteVB.NET dans le forum C++
    Réponses: 11
    Dernier message: 15/12/2005, 23h12
  5. Ouvrir un fichier word en lecture seule
    Par yoyo30 dans le forum Access
    Réponses: 11
    Dernier message: 09/09/2005, 10h25

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