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 :

Savoir pourquoi je n'arrive pas à ouvrir un fichier.


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Savoir pourquoi je n'arrive pas à ouvrir un fichier.
    Bonjour, je succite votre aide pour un problème très simple mais pour lequel je n'ai trouver aucune réponse dans le FAQ ni d'autres postes :

    Je tente d'ouvrir un fichier en lecture / écriture en c++ :

    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
     
    fstream f("/home/md35/resultat_promip/resultat1.txt", ios_base::in | ios_base::out | ios_base::app);
        cout << f.fail() << endl;
        if (f.is_open()) {
            for (count_i = 0; count_i < 25; count_i++) {
                cout << "val " << count_i << " :\t";
                // f << "val " << count_i << " :\t";
                for (count_j = 0; count_j < max_itteration_identique; count_j++) {
                    cout << val_reg[count_j][count_i] << "\t";
                    // f << val_reg[count_j][count_i] << "\t";
                }
                cout << endl;
                // f << endl;
            }
            f.close();
        }
    F.close() retourne false. Je n'ai trouver aucun moyen qui me permette de savoir pourquoi il n'ouvre pas le fichier ! fichier inexistant, manque de droit, etc ... qui me permette de comprendre ce qui se passe !

    Exist-il une fonction qui permette de savoir pourquoi le fichier n'est pas ouvert ? Un code d'erreur que l'on puisse interpréter par exemple !

    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Dans l'état actuel, ton code n'écrit rien du tout dans le fichier.
    Quel est le symptôme exact de l'erreur ?

    PS: Je n'utilise jamais les std::fstream, car je n'ouvre jamais un fichier en lecture et écriture en même temps. Je préfère les std::ifstream et std::ofstream...

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 033
    Points
    11 033
    Par défaut
    J'ai un doute.
    Une ouverture foirée ne positionnerait pas errno des fois ?

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Dans l'état actuel, ton code n'écrit rien du tout dans le fichier.
    Quel est le symptôme exact de l'erreur ?

    PS: Je n'utilise jamais les std::fstream, car je n'ouvre jamais un fichier en lecture et écriture en même temps. Je préfère les std::ifstream et std::ofstream...
    Oui dans le code que je donne j'ai mis les ecritures en commentaire, donc l'ouverture du fichier n'est pas très utile ! Mais oublions les comentaires. En faite, je fait un teste pour savoir si le fichier est ouvert, et il ne rentre pas dedans, c'est comme cela que je détecte le problème.

    J'ai essayer avec des fichiers en lecture seule, mais j'ai exactement le même résultat.
    Prenons donc en compte le code suivant :
    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
     
     
    ofstream f("/home/md35/resultat1.txt", ios_base::out | ios_base::app);
        cout << f.fail() << endl;
        if (f.is_open()) {
            for (count_i = 0; count_i < 25; count_i++) {
                cout << "val " << count_i << " :\t";
                f << "val " << count_i << " :\t";
                for (count_j = 0; count_j < max_itteration_identique; count_j++) {
                    cout << val_reg[count_j][count_i] << "\t";
                    f << val_reg[count_j][count_i] << "\t";
                }
                cout << endl;
                f << endl;
            }
            f.close();
        }

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Oui, je vois ton code.
    Quels sont les symptômes EXACTS d'échec avec ce code-là ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    J'ai un doute.
    Une ouverture foirée ne positionnerait pas errno des fois ?
    J'avoue là j'ai besoin de plus d'explication

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Tout ce qui est dans ma clause if(f.is_open) n'est jamais excécuté.
    L'affichage dans ma fenêtre d'erreur de f.fail indique 1 c'est à dire echec d'ouverture du fichier. Mais je ne sais pas pourquoi il échoue ! Le fichier existe bien, le chemin est un chemin absolue, alors je trouve pas le problème !

    p.s. : Je travail dans un environnement Linux, j'ai mis tous les droits sur le fichier en question pour être tranquille.

    J'aurais aimé avoir des indications supplémentaires sur la source du problème :
    - chemin inexistant,
    - permission denied en ecriture,
    - ...
    Mais je n'ai trouver aucune fonction qui me donne ces indications.

  8. #8
    screetch
    Invité(e)
    Par défaut
    tu peux essayer le meme code en C avec fopen, puis tester le resultat, et donner l'erreur en utilisant la fonction
    perror("Erreur : ");

  9. #9
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Oui c'est une très bonne remarque et c'est ce que je viens de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
        FILE* fichier_c = NULL;
        fichier_c = fopen ("/home/md35/resultat1.txt", "w");
        if (fichier_c != NULL) {
            cout << "reussite" << endl;
            fputs ("ceci est un teste", fichier_c);
        } else {
            cout << "echec" << endl;
        }
        fclose (fichier_c);
    Cela fonctionne très bien, je retrouve ma magnifique chaine de caractère dans le fichier en question !

    Alors où est le problème dans la version C++ ?

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bon, je ne sais pas ce que j'ai changer dans mon code, mais maintenant les deux versions fonctionnent !! Désolé pour le dérangement. Peut-être était-ce des droits de lecture - écriture ? Il y a un truc qui a changer dans mes répertoire dans la nuit !

    Merci encore pour vos réponses.

    Je met le topic en résolu.

  11. #11
    screetch
    Invité(e)
    Par défaut
    fopen crée automatiquement le fichier s'il n'existe pas. est ce le cas de fstream ?
    peut etre fopen a crée le fichier et ensuite la version fstream etait contente car le fichier existait.

  12. #12
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par screetch Voir le message
    fopen crée automatiquement le fichier s'il n'existe pas. est ce le cas de fstream ?
    Oui. Il y a d'ailleurs un beau tableau dans la norme qui defini ce que fait fstream en donnant l'argument equivalent de fopen.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      in   out  trunc  app
            +               "w"
            +           +   "a"
            +     +         "w"
      +                     "r"
      +     +               "r+"
      +     +     +         "w+"
    Si en plus il y a le flag ate, il y a un seek a la fin du fichier apres ouverture.
    Si en plus il y a le flag binary, il y a un b ajoute a la chaine de fopen.
    L'utilisation des autres combinaisons est un comportement indefini.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/10/2009, 11h52
  2. je n'arrive pas à ouvrir un fichier
    Par sakura.haruno dans le forum C
    Réponses: 4
    Dernier message: 24/11/2007, 14h52
  3. Réponses: 18
    Dernier message: 28/08/2007, 11h56
  4. Je n'arrive pas à ouvrir un fichier Excel
    Par Subkill dans le forum VBScript
    Réponses: 4
    Dernier message: 30/01/2007, 21h40
  5. Je n'arrive pas à ouvrir un fichier pdf
    Par tinwul dans le forum Access
    Réponses: 13
    Dernier message: 06/06/2006, 12h56

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