Aus std::ostream ein std::istream machen
-
Ich hatte vor einer Weile die folgende Funktion geschrieben:
void fillBrowserContent(TextDisplay* td, std::istream& urlIn);Diese Funktion liest aus einer Datei (also einem std::ifstream) URL-Adressen und sendet sie an ein TextDisplay-Objekt, das zu einem GUI gehört, dass die URL-Adressen dann anzeigt.
Neuerdings ist es aber so, dass die URL-Adressen verschlüsselt in der Datei gespeichert sind. Zum Entschlüsseln habe ich vor noch längerer Zeit folgende Funktion geschrieben:
void decode(std::istream& in, std::ostream& out, Code& code);Diese Funktion liest den chiffrierten Text aus einem std::istream, dechiffriert ihn und sendet den Klartext an einen std::ostream (bei Code handelt es sich um den Entschlüsselungsalgorithmus).
Das Problem ist, dass ich nach dem Entschlüsseln einen std::ostream habe, ich für das Aufrufen der oberen Funktion, um den Text in der GUI anzuzeigen, aber einen std::istream brauche. Also müsste ich den std::ostream der aus der Entschlüsselungfunktion kommt, irgendwie in einen std::istream umwandeln, den ich in die obere Funktion einführen kann.
Vielleicht kann mir jemand dabei helfen, wie ich das Problem lösen und dabei möglichst meinen alten Code weiter verwenden kann.
Viele Grüße, Holger
-
Vielleicht geht das?
decode(in, out, code); istream in2; out >> in2; fillBrowserContent(td, in2);
-
std::ifstream in("file.txt"); std::stringstream encoded_stream; decode(in, encoded_stream, code); fillBrowserContent(td, encoded_stream);
-
wxSkip schrieb:
std::ifstream in("file.txt"); std::stringstream encoded_stream; decode(in, encoded_stream, code); fillBrowserContent(td, encoded_stream);Schöne, einfache Lösung des Problems, vielen Dank!
Gruß, Holger