Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » umleiten von cout und vice versa

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.05.2005, 03:21 Uhr
Kn___



Hi alle,
also folgendes problem stellt sich mir grad:
ich will in ne textdatei schreiben , selbige danach auslesen und aufm Bildschirm anzeigen lassen.
um in die Datei zu schreiben leite ich mit "<<" auf die datei um.danach les ich die datei aus und will sie mittels cout auf den bildschirm bringen.Woran ich scheiter , die umlenkung von der standard belegung (Bildschirm) auf die Datei, ist mir mittlerweile aufgegangen.Aber an der Lösung haperts zur Zeit ein wenig.
Hab in einem meiner Bücher einen Ansatz entdeckt und auch versucht in meinen code einzubinden,das ergebniss sieht ungefähr so aus:


C++:
quelle.open(quelldateiname,ios::app);
        coutptr = cout.rdbuf();                  
        cout.rdbuf(quelle.rdbuf());            
        cout << i << "_"<<name << "_" <<nummer<<endl;
        cout.rdbuf(coutptr);                      
        quelle.close();



naja der kompiler meckert zwar nicht aber erfolg hab ich auch keinen.eigentlich nahm ich an das nach dem cout.rdbuf(coutptr) alles wieder beim alten ist und ich an anderer stelle in der lage sein sollte wieder auf den bildschirm auszudrucken.Falls mir jemand weiterhelfen kann wär ich recht dankbar : )
und falls obendrein mir noch jemand erklären könnte was genau rdbuf() eigentlich macht wär ich auch nicht abgeneigt, muss zu meiner scham gestehn das ich es mehr eingesezt als verstanden hab.Mehr als eine vage Ahnung hab ich leider nicht.
Danke schonmal.Gruß.Kn__.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.05.2005, 12:58 Uhr
Spacelord
Hoffnungsloser Fall


Mmmh,das sollte eigentlich funktionieren.
Das hier läuft auf jeden Fall:

C++:
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    streambuf* oldSb=0;
    ofstream out("coutFile.txt",ios::app);
    if(out)
    {
        cout<<"File zum schreiben geoeffnet!"<<endl;
        oldSb = cout.rdbuf(out.rdbuf());
        cout<<"Das waere normal auf dem Bildschirm gelandet!"<<endl;
        out.close();

        //Alten streambuffer wieder zuweisen
        cout.rdbuf(oldSb);

        cout<<"Und da isser wieder ;)"<<endl;
    }

    
    return 0;
}




Ist ja vom Prinzip her auch nichts anderes.

Was rdbuf angeht:
Das Parameterlose rdbuf liefert dir den streambuf Zeiger deines Streamobjekts.
Die Streamklassen sind eigentlich "nur" nen Wrapper um die Streambuffer-Klassen.
Die eigentliche Arbeit erledigen die streambuffer Klassen wobei diese wiederum intern Methoden nutzen die char_traits bereitstellt um das Ganze optimal erweiterbar zu machen.
Wenn du z.B. cin.get benutzt wird das ganze(angereichert mit diversen Zeilen Code um Fehler abzufangen) zu nem rdbuf()->sbumpc.
Im Grunde ist sbumpc das eigentliche Gegenstück zu getc aus C.Wenn du irgendwas schreiben möchtest wo es auf Performance ankommt ist also sbumpc die erste Wahl.
Ich denke das ist auch der Grund warum mit rdbuf ein Implementierungsdetail preisgegeben wird.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: