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 :

Rediriger la sortie standard/erreur vers une chaîne


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 59
    Points
    59
    Par défaut Rediriger la sortie standard/erreur vers une chaîne
    Voici le code avec une fonction simple permettant de rechercher dans le flux d'erreur redirigé.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <iostream>
    #include <string>
    using namespace std;
    using namespace boost;
     
    streambuf* errorBuffer = NULL;
    stringbuf* errorBufTemp = NULL;
    string outputErrorString;
     
    void Redirect_cerr_Begin()
    {
    	if ( ! errorBufTemp )
    	{
    		// create temp string error buffer and assign to cerr stream
    		outputErrorString = "";
    		errorBufTemp = new stringbuf( ios_base::out );
    		errorBuffer = cerr.rdbuf( errorBufTemp );
    	}
    }
     
    void Redirect_cerr_End()
    {
    	if ( errorBufTemp )
    	{
    		// copy error stream to errorBufTemp
    		outputErrorString = errorBufTemp->str();
     
    		// destroy temp string error buffer
    		cerr.rdbuf( errorBuffer );
    		delete errorBufTemp;
    		errorBufTemp = NULL;
    	}
    }
     
    bool Find_error( string errorStr )
    {
    	size_t foundPos = string::npos;
    	foundPos = outputErrorString.find( errorStr );
     
    	return ( foundPos != string::npos );
    }
    voici un test

    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
     
    #include <boost/test/unit_test.hpp>
    #include <boost/test/auto_unit_test.hpp>
    #include <iostream>
    #include <string>
    using namespace std;
    using namespace boost;
     
    BOOST_AUTO_TEST_CASE( ErrorStreamCase )
    {
    	Redirect_cerr_Begin();
    	{
    		cerr << "Envoi d'un message dans le flux d'erreur\nLe message est celui-ci\n";
    		cerr << "Message caché";
    	}
    	Redirect_cerr_End();
     
    	BOOST_CHECK_EQUAL( Find_error( "Le message est"), 1 );
    	BOOST_CHECK_EQUAL( Find_error( "Le message n'est pas"), 0 );
    }

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 633
    Points
    219 633
    Billets dans le blog
    125
    Par défaut
    Bonjour,

    Y a t'il une question, ou c'est juste un code qui marche d'exemple ?

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 338
    Points
    2 338
    Par défaut
    Salut,

    J'ai l'impression que tu t'est trompé de place.
    Il faut que tu mette ton code dans "contribution" si tu voulais que celui-ci serve d'exemple.
    Ou alors, tu as un probleme. En ce cas, explique ton probleme.

    Merci

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

Discussions similaires

  1. Rediriger la sortie standard d'erreur avec un traitement
    Par bubulemaster dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 16/02/2011, 18h16
  2. Rediriger la sortie standard dans une variable
    Par Erielle dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 22/10/2010, 16h24
  3. Réponses: 2
    Dernier message: 22/05/2006, 11h02
  4. Réponses: 3
    Dernier message: 21/10/2005, 14h49
  5. rediriger la sortie standard vers un textarea
    Par gromite dans le forum Composants
    Réponses: 9
    Dernier message: 10/05/2004, 11h07

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