begin process at 2012 05 30 16:08:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Fichier & Disque

 > 

redirection temporaire entree standard


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

redirection temporaire entree standard

jeudi 7 janvier 2010 à 18:48:36 | redirection temporaire entree standard

simonpelloquin

Bonjour à tous,

Je suis sous linux, et fais une petite class sous emacs.
Une methode "getData" de cette classe affiche des données à l'ecran (par cout).
Il m'est demandé de fournir une méthode pour enregistrer ces données dans un fichier.
Je pensais donc faire une nouvelle methode "saveDataToFile(const string)" qui, dans un premier temps redirigerai la sortie standard vers le fichier en question, puis appelerai la methode "getData" et enfin remettrai la sortie standard à son état initial...
Est-ce qu'une ame charitable pourrait m'indiquer l'instruction pour rediriger la sortie standard vers un fichier ou vers l'écran ?

merci d'avance

Simon
jeudi 7 janvier 2010 à 18:56:11 | Re : redirection temporaire entree standard

simonpelloquin

Réponse acceptée !

arf, désolé, pas assez cherché...

trouvé sur cpp.developpez.com :

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
ofstream Out("Toto.txt");
streambuf* OldBuf = cout.rdbuf(Out.rdbuf());

cout << "Affichage dans Toto.txt"<< endl;

// Restauration du streambuf initial de cout (affichage sur la console)
cout.rdbuf(OldBuf);
}


Merki quand même...

Simon
jeudi 7 janvier 2010 à 19:49:00 | Re : redirection temporaire entree standard

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Ce n'est pas super comme technique.
Généralement on utilise un flux, et en fonction de ce qui est instancié le flux est mis dans un fichier, à l'écran, sur le réseau, etc...

Ex:
Code C/C++ :
#include <iostream>
#include <fstream>
#include <sstream>

void write(std::ostream& out, const std::string& msg)
{
  out << msg << std::endl;
}

int main()
{
  // Sur la sortie standard
  write(std::cout, "Kikoo in cout");

  // Sur la sortie d'erreur
  write(std::cerr, "Kikoo in cerr");

  // Dans un buffer de chaine de caractere
  std::ostringstream ss;
  write(ss, "Kikoo in string stream");
  std::cout << ss.str() << std::endl;

  // Dans un fichier
  std::ofstream file("toto.txt");
  write(file, "Kikoo in file");

  return 0;
}


using namespace std;


Beurk ! Ne l'utilise jamais !!!
Un article à ce sujet: Du bon usage du using namespace

__________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
jeudi 7 janvier 2010 à 20:59:19 | Re : redirection temporaire entree standard

simonpelloquin

Merci pour ta réponse.

Effectivement, il semblerait que mon code sente la bidouille à plein nez. Ceci dit, il permet d'afficher dans un fichier ou à l'écran sans avoir à "dupliquer" le code (je sais pas si je suis assez clair)
En prenant un peu de recul et grâce à ton commentaire, je m'aperçois qu'il vaudrait mieux faire une methode privée getData(<type de sortie>) qui effectue le traitement, et deux methodes publiques qui appellent getData avec au choix la sortie standard ou un fichier en paramètre. Malheureusement, je suis encore un peu léger en c++, donc si tu as une petite suggestion à me donner... elle sera la bienvenue.

Promis, dès que j'ai un peu de temps, je me penche sur le using namespace.

Simon
jeudi 7 janvier 2010 à 21:12:50 | Re : redirection temporaire entree standard

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !

En prenant un peu de recul et grâce à ton commentaire, je m'aperçois qu'il vaudrait mieux faire une methode privée getData(<type de sortie>) qui effectue le traitement, et deux methodes publiques qui appellent getData avec au choix la sortie standard ou un fichier en paramètre. Malheureusement, je suis encore un peu léger en c++, donc si tu as une petite suggestion à me donner... elle sera la bienvenue.


C'est tout à fait correcte et me semble une bonne idée.

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
vendredi 8 janvier 2010 à 08:34:33 | Re : redirection temporaire entree standard

simonpelloquin

merci pour ta remarque...
Pourrais-tu me dire si tu connais un type de paramètres qui me permettrait d'appeler une fonction en lui passant soit la sortie standard, soit un fichier de sortie ?

Simon
vendredi 8 janvier 2010 à 09:59:32 | Re : redirection temporaire entree standard

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !

Pourrais-tu me dire si tu connais un type de paramètres qui me permettrait d'appeler une fonction en lui passant soit la sortie standard, soit un fichier de sortie ?


Ce n'est pas ce que je faisais dans mon premier exemple ?

Peut être ceci répondra à ta question:
Code C/C++ :
private:
  void write(std::ostream& out, const std::string& msg) const;
public:
  void writeFile(const std::string& filename, const std::string& msg) const
  {
     std::ofstream file(filename); // std::ios::append pour ne pas ecraser, cf la doc d'ofstream
     write(file, msg);
     file.close();
  }
  void writeOutput(const std::string& msg) const
  {
     write(std::cout, msg);
  }
  void writError(const std::string& msg) const
  {
     write(std::cerr, msg);
  }


N'hésite pas, si tu as des questions :)

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
vendredi 8 janvier 2010 à 10:35:47 | Re : redirection temporaire entree standard

simonpelloquin


ok, merci, j'avais mal compris... je vais essayer d'améliorer ma class dans ce sens (si j'ai un peu de temps)

Simon


Cette discussion est classée dans : fichier, methode, redirection, sortie, standard


Répondre à ce message

Sujets en rapport avec ce message

Programmation Système Linux [ par salvio3223 ] Bonjour bonjour.Je souhaitais simplement demander si il est possible (je pense lol) de copier le résultat de l'execution de commande sur la sortie sta Redirection sortie standard processus [ par bouba ] Bonjour, j'ai un programme qui créer un nouveau thread avec la fonction ShellExecute de l'API Win32 afin de lancer un exécutable. Le thread ainsi lanc redirection sortie standard dans plugin [ par NonoWeb ] Bonjour j'ai fait la redirection de la sortie standard dans un fichier et dans une zone de texte de mon application.Cela fonctionne tres bien dans mon Formatage des flux de sortie fichier. [ par moumouteb ] Quand la merde vaudra de l'or les pauvres naitrons sans trou du cul. Coluche.Mon projet : <a target="_blank" title="Squirrel's Cliff" href="http://squ ecriture dans un fichier [ par cacoucatatonique ] bonjours,je me suis mis au laanguage C parcequ'a l'ecole j'ai un cours dessus, et je butte sur une erreur inconue.En faite mon probleme vien du fait q Entree/Sortie sur fichier [ par Kangourou_Nomade ] Bonjour,je souhaiterais serialiser des variables (integer, string, char * ou autres) dans un fichier en entree sortie.C'est quelquechose que je saurai pb avec passages de parametres (WIN32) [ par mogwai93 ] Bonjour j'ai un pb avec une variable qui ne semble pas passer en parametres : j'ai 3 fichiers : -1 fichier main.cpp -1 fichier ajout.h -1 fichier ajo changer un octet dans un fichier ? [ par supergrey ] Bonjour, je sais le faire mais je souhaiterai connaitre la methode la plus simple pour changer le premier octet d'un fichier, par exemple ajouter 1 a Afficher du texte dans une fenetre SDL [ par kojiro2 ] Coucou,J'ai vu dans plusieurs tuto comment traiter les évenements clavier avec SDL mais j'ai un problème :Quand j'utilise la fonction printf(), le pro iostream [ par mat74 ] salut j'aimerai savoir comment je pourrai faire pr rajouter qq chose a la fin d'un fichier texte sans qu'il soit totalement effacer .j'ai essayer sa


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,867 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales