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

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    février 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : février 2013
    Messages : 71
    Points : 82
    Points
    82

    Par défaut Lecture fichier ligne par ligne

    Bonjour à tous,

    J'ai une petite question concernant la fonction std::getline. J'ai 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    bool readFirstLine(const std::string &sFilePath, std::string &sFirstLine)
    {
    	bool bRes = false;
     
    	std::ifstream oInFile(sFilePath);
     
    	if (oInFile.is_open())
    	{
    		if (std::getline(oInFile, sFirstLine))
    		{
    			bRes = true;
    		}
    		else
    		{
    			bRes = false;
    		}
     
    		oInFile.close();
    	}
    	else
    	{
    		bRes = false;
    	}	
     
    	return bRes;
    }
    L'analyseur statique de code m'indique que la condition suivante n'est pas sur un booléen :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (std::getline(oInFile, sFirstLine))
    Je ne vois pas comment remédier à cela car il y a plusieurs erreurs possibles avec un ifstream.

    Avez-vous une idée pour rendre la condition booléenne ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    5 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : août 2004
    Messages : 5 438
    Points : 15 846
    Points
    15 846

    Par défaut

    Quel outil d'analyse de code utilises-tu ?

    std::getline te retourne le flux, qui est converti en booléen par std::basic_ios::operator bool, ce dernier renvoyant l'inverse de std::basic_ios::fail.

    Donc si tu veux/dois être explicite (mais je considère qu'en l'occurrence, c'est une mauvaise idée, un anti-pattern), tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::getline(oInFile, sFirstLine)
    if (!oInFile.fail()) { /*...*/}
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

Discussions similaires

  1. Lecture d'une matrice ligne par ligne
    Par bab33 dans le forum Simulink
    Réponses: 8
    Dernier message: 04/08/2014, 10h20
  2. Réponses: 9
    Dernier message: 03/07/2014, 18h08
  3. lire fichier .txt (NOTEPAD) ligne par ligne
    Par skambram dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/06/2009, 18h41
  4. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum IO
    Réponses: 4
    Dernier message: 11/02/2009, 10h44
  5. [debutant]lecture fichier ligne par ligne
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 19h02

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