2008-11-27 15 views
37

ich derzeit std::ofstream bin mit wie folgt:Schreiben string Inhalt in ofstream

std::ofstream outFile; 
outFile.open(output_file); 

Dann versuche ich, ein std::stringstream Objekt outFile passieren wie folgt:

GetHolesResults(..., std::ofstream &outFile){ 
    float x = 1234; 
    std::stringstream ss; 
    ss << x << std::endl; 
    outFile << ss; 
} 

Nun meine outFile enthält nichts anderes als Müll: "0012E708" wiederholt sich überall.

In GetHolesResults kann ich

outFile << "Foo" << std:endl; 

schreiben und es wird korrekt ausgegeben in outFile.

Irgendwelche Vorschläge, was ich falsch mache?

+1

Ich schlage vor, Sie um den Titel zu etwas in der Linie der neu formulieren: ‚string Inhalt in ofstream writting‘ (oder Ostream für das, was wichtig ist) –

+1

Eric, sollten Sie Antwort markieren Johannes als angenommen, so dass ich meine löschen (was deutlich schlechter ist als sein Ansatz) –

+1

Ok, fertig. Aber damals benutzte ich deine Lösung =) – Eric

Antwort

67

Sie können dies tun, die die Zeichenfolge nicht erstellen muss. Es bewirkt, dass der Ausgabestrom den Inhalt des Streams auf der rechten Seite ausgibt (verwendbar mit allen Streams).

outFile << ss.rdbuf(); 
+5

Ich bin gespannt: Warum funktioniert diese Lösung mit 'std :: stringstream', aber nicht mit' std :: ostringstream'? Im zweiten Fall bekomme ich eine leere Datei. –

+3

@JaviV, weil Sie [nur schreiben] (http://en.cppreference.com/w/cpp/io/basic_ostream) zu 'std :: oANYSTREAM' und nur von' std :: iANYSTREAM' lesen können. Es wird keinen Sinn für "output_stream" geben, wenn es auch "read" Operationen hätte. Wenn Sie beides brauchen, benutzen Sie einfach 'std :: ANYSTREAM' und Sie sind zu Hause :) –

3

Wenn Sie einen Stringstream rdbuf an einen Stream übergeben, werden Newlines nicht übersetzt. Der eingegebene Text kann \n enthalten, so dass Ersetzen nicht funktioniert. Der alte Code schrieb an einen fstream, und der Wechsel zu einem String-Stream führte zu einem Verlust der endl-Übersetzung.

+2

Dies sollte ein Kommentar sein, nicht eine Antwort, weil Sie nicht gesagt haben, wie man einen std :: stringstream zu einem std :: ofstream – bitek

8

Wenn Sie std::ostringstream verwenden und sich wundern, warum nichts mit ss.rdbuf() geschrieben wird, dann verwenden Sie .str() Funktion.

outFile << oStream.str(); 
+4

Ihre Antwort schreibt führte mich zu folgender Erkenntnis: Um ein 'char'-Array von' ss' zu bekommen, kann man 'ss.str(). c_str()' machen. (Einfach hier posten für Neulinge, die in Zukunft darüber stolpern.) – dbliss

+1

@Digital_Reality, danke! Als ich rdbuff benutzte, wurde nichts geschrieben. Was ist der Grund dafür? – Nasir

Verwandte Themen