ubuntuusers.de

c++ fstream << sringstream

Status: Gelöst | Ubuntu-Version: Ubuntu
Antworten |

cgogolin

Anmeldungsdatum:
4. Juli 2006

Beiträge: 169

Hallo!

Ich habe eine 'stringstream' dessen Inhalt ich in einen bereits existierenden 'filestream' schreiben möchte.

Momentan mache ich das so:

MyFstream << MyStringStream.str();


was mir etwas unelagent aussieht und bestimt auch performancemäßig suboptimal ist.

Gibt es nicht eine Möglichkeit direkt den Inhalt des streams zu kopieren ohne den Umweg über 'str()' ?

[edit]
Und noch was. Wie komme ich an die Größe des 'stringstreams' im Speicher heran?
[/edit]

Danke!

Dee Team-Icon

Avatar von Dee

Anmeldungsdatum:
9. Februar 2006

Beiträge: 20095

Wohnort: Schwabenländle

Du müßtest den Operator << für MyFstream einfach überladen, so daß Du MyFstream << MyStringStream tippen kannst. In der Funktion mußt Du dann aber dennoch auf .str() zurückgreifen, weil irgendwie mußt Du ja an dei Daten des StringStreams kommen.

Wie komme ich an die Größe des 'stringstreams' im Speicher heran?

Also es ist doch Deine Klasse, da solltest Du das wissen. ☺ Ansonsten haben streams meistens die Eigenschaft eine undefinierte Größe haben zu können, werden also nach-und-nach abgearbeitet und nicht in einem Rutsch.

Gruß, Dee

cgogolin

(Themenstarter)

Anmeldungsdatum:
4. Juli 2006

Beiträge: 169

Die Beispielnamen waren vielleicht blöde gewählt, aber es handelt sich bei den beiden Objekten 'MyFstream' und 'MyStringStream' nicht um eigene Klassen, sondern um Oblekte der Klassen 'stringstream' und 'filestream' aus der stl.

Ich dachte da eher an einen direkten Speicherzugriff also einen Pointer auf den Puffer des stringstreams und dann byte für byte in den Puffer des fstreams, aber der Aufwand und das damit verbundene Risiko lohnen wohl nicht...

Wegen der Größe, ich meinte die Größe des Pufferspeichers des stringstreams, sprich wie viele Bytes an Daten er "enthält"

Dee Team-Icon

Avatar von Dee

Anmeldungsdatum:
9. Februar 2006

Beiträge: 20095

Wohnort: Schwabenländle

Ach so, das meinst Du:

stream.seekg(0, ios::end);                          // move to end of stream
int size = stream.tellg()/sizeof(TYPE);             // count number of entries
stream.seekg(0, ios::beg);                          // move to begin of stream

TYPE mußt Du dann eben anpassen, je nach dem, was Du aus dem Stream lesen willst.

Gruß, Dee

cgogolin

(Themenstarter)

Anmeldungsdatum:
4. Juli 2006

Beiträge: 169

Herzlichen Dank!

Antworten |