Comment imprimer un istream entier en sortie standard et en chaîne

Comment imprimer une variable istream en sortie standard. [EDIT] J’essaie de déboguer un scénario dans lequel je dois transférer un stream de dissortingbution istream dans un fichier journal

Vous sortez du streambuf de l’istream.

Par exemple, pour sortir un ifstream sur cout:

std::ifstream f("whatever"); std::cout << f.rdbuf(); 

Edit: Je suppose que vous voulez copier tout le contenu du stream, et pas seulement une valeur unique. Si vous ne voulez lire qu’un seul mot, cochez plutôt la réponse de 1800.


La solution évidente consiste à copier en boucle un mot à la fois, mais vous pouvez le faire plus simplement, comme un bon oneliner:

 #include  #include  ... std::istream i; std::copy(std::istream_iterator(i), std::istream_iterator(), std::ostream_iterator(std::cout)); 

Stream_iterators utilise l’opérateur << et >> en interne, ce qui signifie qu’ils vont ignorer les espaces. Si vous voulez une copie exacte, vous pouvez utiliser std :: istreambuf_iterator et std :: ostreambuf_iterator. Ils travaillent sur les tampons de stream sous-jacents (non formatés) afin de ne pas ignorer les espaces ni convertir de nouvelles lignes ou quoi que ce soit.

Vous pouvez également utiliser:

  i >> std::noskipws; 

pour empêcher les espaces de disparaître. Notez toutefois que si votre stream est un fichier binary, certains autres caractères peuvent être masqués par les opérateurs >> et << .

Ceci imprimera le stream entier, un caractère à la fois:

 char c; c = my_istream.get(); while (my_istream) { std::cout << c; c = my_istream.get(); } 

Ceci imprimera le tout, mais éliminera les espaces:

 std::ssortingng output; while(my_istream >> output) std::cout << output; 

Vous devez en lire le contenu, puis sortir ce que vous lisez:

 istream stm; ssortingng str; stm >> str; cout << str; 

Surcharge de std :: ifsream et std :: ossortingngstream

c ++ 11 ou supérieur


Faites attention à && dans std :: ifstream qui vous permet de diriger en utilisant

 #include  #include  #include  std::ostream& operator<<(std::ostream& os, std::basic_ostringstream&& iss){ return os< 

sortie:

 Test ossortingngstream overloading Test fstream overloading Process returned 0 (0x0) execution time : 0.012 s Press ENTER to continue.