rdbuf()

Hallo,

ich wollte einfach wissen ob auch andere Möglichkeiten dafür gibt. Ich will was alles auf die Konsole erscheint auch in eine Datei gespeichert wird. Es gibt bestimmt etwas mit dem man die Konsolenausgabe in eine Datei umlenken(umleiten) kann oder nicht?


Danke
 
moin


Ein neuer Thread hätte dann aber nicht Not getan....

Geht das nciht irgendwie so:
Code:
ofstream fdatei;
.....
fdatei = cout;
...
Du findest hier übrigens auch eine Beispiele wie man den Inhalt der Konsole in eine Datei bekommt!!


mfg
umbrasaxum
 
Hi.
Tobias K. hat gesagt.:
moin


Ein neuer Thread hätte dann aber nicht Not getan....

Geht das nciht irgendwie so:
Code:
ofstream fdatei;
.....
fdatei = cout;
...
Nein, das geht so nicht da der Zuweisungsoperator der Stream Klassen als private deklariert ist. IOstream Objekte können (standardmäßig) nicht zugewiesen werden. Außerdem hätte das nicht den Effekt das alles was auf cout geschrieben wird in eine Datei umgeleitet wird, sondern alles was auf fdatei geschrieben wird auf der Standardausgabe erscheint (falls die Zuweisung erlaubt wäre).

@erkan erpolat: die rdbuf Methode funktioniert doch - damit kann das streambuf Objekt eines Stream ausgetauscht werden. Wenn du die Ausgabe auf 2 Objekte erweitern willst mußt du das selbst programmieren indem du eine eigene streambuf Klasse implementierst die im Grunde 2 streambuf Objekte verwaltet und die Ausgabe immer auf beide schreibt.

Gruß
 
moin


Hmm, ich meinte das ging irgendwie... hab mich wohl geirrt.

Der vorschlag mit der selbstgeschrieben Klasse ist garnicht schlecht.
Zu der Umleitung mit rdbuf() noch dieser Link: http://www.josuttis.com/cppbuch/io/redirect.cpp.html

Oder noch kürzer:
Code:
#include <iostream>
#include <fstream>

int main()
{
  std::ofstream file("test.txt");
  std::cout.rdbuf(file.rdbuf()); // Umleitung
  std::cout << "Hallo" << std::endl
  return 0;
}

mfg
umbrasaxum
 
Hi.
Tobias K. hat gesagt.:
http://www.josuttis.com/cppbuch/io/redirect.cpp.html

Oder noch kürzer:
Code:
#include <iostream>
#include <fstream>

int main()
{
  std::ofstream file("test.txt");
  std::cout.rdbuf(file.rdbuf()); // Umleitung
  std::cout << "Hallo" << std::endl
  return 0;
}
Interessanter Link - allerdings solltest du nicht vergessen den rdbuf wieder zu restaurieren wie dort angegeben - sonst wird versucht den streambuf zweimal zu Zerstören bzw. der eine streambuf nicht richtig geschlossen.

Noch ein Link zum Thema: ;) http://www.tutorials.de/forum/1239767-post2.html

Gruß
 
Zurück