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

Langage C++ Discussion :

Ifstream vide après ouverture


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Par défaut Ifstream vide après ouverture
    Bonjour,

    je récupère un code C++ assez simple qui ouvre un fichier et le met dans un buffer pour le parser ensuite. Cependant, de temps en temps, il ne fonctionne pas et génère une exception "basic_ios::clear" à l'ouverture (il semble que c'est lorsque le fichier a un ".CSV" a la fin mais je trouve ça louche). Ce fichier existe bien, n'est pas vide et a tous les droits en lecture.

    J'ai repris le code en me basant sur l'exemple de la FAQ mais le probleme persiste...

    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
    std:ifstream csvFile;
    csvFile.exceptions ( ifstream::eofbit | ifstream::failbit | ifstream::badbit );
    cout << "Open File " << iDirectory.c_str() << endl;
    try{
        csvFile.open(iDirectory.c_str());
    }
    catch (ifstream::failure e)
    {
      cout << "Exception opening/reading file " << e.what() << endl;
    }
    // get length of file:
    csvFile.seekg (0, ios::end);
    length = csvFile.tellg();
    cout << "Length " << length << endl;
    // ...
    Open File /FULL_PATH/babar.CSV
    Exception opening/reading file basic_ios::clear
    Length 4294967295
    Quand le test marche, on a :
    Open File /FULL_PATH/babar
    Length 367
    ...
    Je suis un peu rouillé en C++... Quelqu'un aurait il une piste (ou la solution ) ?

    Merci.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 128
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Personnellement, je fais une de fichier de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ifstream file(MonFichier.x_str());
    if ( file.isOpen() )
    {
     // Fais mumuse
    }
    Du coup ... je trouve votre code compliqué
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre expérimenté Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Par défaut
    Merci pour la réponse !

    en fait, j'ai changé un peu le code en suivant la FAQ pour voir quelle exception était levée. Mais avec ton code, le programme ne fait jamais mumuse en fait alors qu'il devrait. A priori, le programme n'arrive pas a ouvrir le fichier (rend -1 pour le unsigned int length a priori) avec un point dans le nom.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 128
    Billets dans le blog
    149
    Par défaut
    J'ai envie de simplement dire que c'est parce que le fichier n'existe pas ...
    Je ne vois pas en quoi le point pourrait tromper le programme ... a moins que le nom que vous utilisez est faux ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre expérimenté Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    J'ai envie de simplement dire que c'est parce que le fichier n'existe pas ...
    Je ne vois pas en quoi le point pourrait tromper le programme ... a moins que le nom que vous utilisez est faux ...
    Je suis d'accord, d'ou mon scepticisme face a ce programme. Et le fichier existe bel et bien, avec tous les droits en lecture, comme dit dans mon 1er message.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par LittleWhite Voir le message
    Personnellement, je fais une de fichier de cette manière (...)
    En fait il suffit même de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::ifstream file(MonFichier.c_str());
    if ( file )
    {
     // Fais mumuse
    }
    Cf. comment fonctionnent les tests d'ouverture de fichier.

    Pour le problème initial, peut-être que comment tester l'existence d'un fichier peut aider ?

    MAT.

  7. #7
    Membre expérimenté Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Par défaut
    Salut Mat, merci pour ton aide.

    Citation Envoyé par Mat007 Voir le message
    Salut,


    En fait il suffit même de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::ifstream file(MonFichier.c_str());
    if ( file )
    {
     // Fais mumuse
    }
    en fait, c'est le test qui était fait initialement, et qui plantait sans raison (connue en tout cas).

    Citation Envoyé par Mat007 Voir le message
    Cf. comment fonctionnent les tests d'ouverture de fichier.

    Pour le problème initial, peut-être que comment tester l'existence d'un fichier peut aider ?

    MAT.
    Deja vu, malheureusement...

  8. #8
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Citation Envoyé par Fango Voir le message
    en fait, c'est le test qui était fait initialement, et qui plantait sans raison (connue en tout cas).
    Ça plantait de quelle manière ?

  9. #9
    Membre expérimenté Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(!csvFile) {
      cout << "Bad input file" << endl;
      csvFile.close();
      return false;
    }
    Du coup, ça sortait "Bad input file"

  10. #10
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Bonjour,
    C'est peut-être simplement une question de casse ?
    Parfois on pense trop vite aux problèmes compliqués et on oublie les plus simples, alors je dis ça comme ça…

    Sinon, ça me paraît louche qu'il arrive à ouvrir « /FULL_PATH/babar » et pas « /FULL_PATH/babar.CSV ».
    Tu es sûr que le nom de ton fichier a une extension ?

  11. #11
    Membre expérimenté Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Par défaut
    Citation Envoyé par Steph_ng8 Voir le message
    Bonjour,
    C'est peut-être simplement une question de casse ?
    Parfois on pense trop vite aux problèmes compliqués et on oublie les plus simples, alors je dis ça comme ça…
    Ah peut être tiens, je n'y avais pas pensé ! Je vais verifier.

    Citation Envoyé par Steph_ng8 Voir le message
    Sinon, ça me paraît louche qu'il arrive à ouvrir « /FULL_PATH/babar » et pas « /FULL_PATH/babar.CSV ».
    Tu es sûr que le nom de ton fichier a une extension ?
    Oui

Discussions similaires

  1. [VBNET] Evenement après ouverture formulaire
    Par PoZZyX dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/05/2006, 21h54
  2. [VB.NET] Création de control après ouverture du form
    Par boulete dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/03/2006, 12h06
  3. Temps écoulé après ouverture de session windows
    Par kasjacques dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 02/12/2005, 08h49
  4. Rechargement d'une page après ouverture de deux popups
    Par petitmoosse dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/11/2005, 16h39
  5. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37

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