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

SL & STL C++ Discussion :

ifstream, failbit uniquement sous XP


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Par défaut ifstream, failbit uniquement sous XP
    Bonjour à tous!

    J'ai un problème avec un bout de code qui passe sous Linux gcc, Vista (avec VS2005) et qui ne passe pas sous XP (toujours avec VS2005).

    Voici la portion en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ifstream in;
    in.open(chemin, ios::in | ios::binary);
    bool fin=0;
    unsigned int long long test;
    while (!fin)
    {
    in>>test;
    ......
    }
    Ce bout de code fonctionne comme esperé sous Linux (g++) et Vista (VS2005), mais, sous XP (VS2005), au bout de quelques lectures, un failbit est levé et la, plus rien n'est lu correctement. A prioris un problème de cast vers unsigned int long long, mais le grand mystère pour moi, c'est pourquoi cela marche comme convenu sur d'autres OS et surtout pourquoi le début de la lecture marche bien et plante, accessoirement, toujours au meme endroit.
    J'ai penser que c'etait un "caractère" précis qui faisait dysfonctionner, mais, je retrouve ce caractère dans d'autres fichiers et celui ci est bien lu, par contre, ca plante toujours un peu plus tard.
    J'ai aussi pensé que ca pouvait planter toujours après un certain nombre de lecture, et la encore, ca varie selon le fichier. Pour un fichier X, ca plantera toujours au bout de la 10ième lecture, et pour un fichier Y, toujours au bout de la 15ième, etc...

    Bref, je suis perdu et déconcerté car la plate forme de prédilection de cette application sera XP et aucune autre.

    Si quelqu'un peut éclairessir ma situation, je lui serai reconnaissant.

    Merci bien et bonne journée.

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    AMHA :
    Citation Envoyé par MonsieurHelmut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    in.open(chemin, ios::in || ios::binary);
    Bon et après, c'est quoi "un failbit est levé" ?

  3. #3
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    in.open(chemin, ios::in || ios::binary);
    Pas vraiment, non. Là tu vas avoir un booléen au lieu d'une combinaison de bits.

    Pourquoi utiliser >> avec un fichier ouvert en mode binaire ?
    Es-tu sûr que Visual C++ 2005 sous XP gère bien les long long ? Tu as essayé de remplacer par un __int64 ? Ou juste 2 long ?

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Exact, j'ai bien confondu les deux...

    Sinon "sizeof(int long long)" renvoie bien 8 sous VS2005.

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Par défaut
    Merci pour les réponses.

    Tout d'abord, après vérification, VS sous XP gère bien les long long comme des _int64.
    Ensuite, pour >>, c'est la seule méthode qui fonctionnait (ou qu'on a réussi à faire fonctionner) sur le coup. Read, par exemple, ne donnait pas de valeur correctes.
    C'est pour un projet d'études et c'est mon binome qui a testé les différentes possibilités de lecture pour aboutir à >>.
    En tout cas, il nous est obligé de lire le fichier en binaire.

    Merci encore pour le coup de main.

  6. #6
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Votre fichier se présente sous quelle forme ? Pourquoi le mode binaire est-il obligatoire ?

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

Discussions similaires

  1. Authentification unique sous asp.net 2.0
    Par ouadie99 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 29/09/2008, 22h15
  2. Bug d'affichage uniquement sous IE
    Par kervano dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/06/2007, 21h02
  3. [CKEditor] Obtention d'une erreur uniquement sous Firefox
    Par Lépine dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 21/12/2006, 11h03
  4. [FB] longueur max d'un champ unique sous forebird = 80 ?!
    Par moucrack dans le forum Débuter
    Réponses: 3
    Dernier message: 06/09/2005, 23h50
  5. Créer un champ unique sous Entreprise Manager
    Par Kokito dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/11/2004, 09h54

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