In Variablen speichern
-
@Caipi:
zwei kleine hinweise:
statt is_open ginge auch nurif (infile)
und statt zeichen für zeichen via get einzulesen kann man auch den buffer eines streams direkt auf einem anderen ausgeben (via operator<<)
cout << infile.rdbuf();
aber das ist nur herumgehacke auf kleinigkeiten...
-
davie schrieb:
@Caipi:
zwei kleine hinweise:
statt is_open ginge auch nurif (infile)
Hem, und warum?
-
weil der op() ueberschrieben ist
-
etwas genauer:
basic_ios definiert operator void* und operator!. in dem ausdruckif (infile);
wird infile daher zu void* konvertiert. operator void* liefert einen nullzeiger, wenn das failbit gesetzt ist (andernfalls einen anderen, nicht 0-zeiger). und das failbit wird von einem fstream u.a. dann gesetzt, wenn dessen buffers open-methode fehlschlägt. (d.h. einen nullzeiger zurückliefert).
alles klar?
-
Aha! Hab ich nicht gewusst. Danke!
-
Cool und kann man den Buffer eines Streams dann auch via Operator einer Variable übergeben. Wenn ja wie? Danke im Voraus.
Steve O.
-
ich verstehe nicht ganz, was du tun willst (den buffer eines streams einer variable übergeben via operator) ...
-
Ich meine das Ganze in etwa so:
variable << infile.rdbuffer();
Ich hoffe du weist was ich meine. Danke schonmal.
Steve O.
-
mit streams funktioniert das.
void foo (ostream& stream, streambuf* b) { stream << b; }
wenn du z.b. jetzt eine ganze datei in einen string speichern willst, geht das so:
void foo (ifstream& file, string& s) { stringstream tmp; tmp << file.rdbuf(); s = tmp.str(); }
-
Danke und wenn ich jetzt eine Zahl in der Datei habe und die Zahl in einer Integer Variable speichern will um vielleicht damit später zu rechnen oder sowas geht das wenn ja wie?
Steve O.
-
void foo (fstream &file) { int i; file >> i; }
das über den streambuffer zu machen, hat wenig sinn.
-
Artchi schrieb:
Ist trotzdem nicht falsch, wenn er es nicht gleich im Ctor macht. Wäre es falsch, würde es einen Compile-Error geben, nicht wahr?
och, man kann auch viel ohne compiler-fehler "falsch" machen...
Würde an deiner Stelle es nicht als "falsch" verkaufen
hab ich gar nicht