Inhalt einer Text Datei kopieren

partitionist

Erfahrenes Mitglied
Ich will den ganzen Inhalt einer Text Datei in ein String speichern und dann verschlüsselt in eine andere Datei speicher, nur mein Problem ist es alles auszulesen hier ein Bsp.


Code:
 ...
 ifstream f;
 char zeile[1024];
 
 while (!f.eof())
 {
 			  // Die Datei zeilenweise auslesen
 			  f.getline(zeile, 1024);
 			 string XXX = crypt(zeile);
 			 ofstream f("crypt");
 			  f << XXX << endl;
 }

Wenn ich den code verwende dann wird nur die letzte zeile der Text Datei gespeichert, was soll ich ändern?
 
Du legst in jedem Schleifendurchlauf eine neue Variable XXX an, in die die gerade gelesene Zeile gespeichert wird. Nach Verlassen des while-Blockes (und das passiert auch, wenn ein weiterer Durchlauf gestartet wird) ist die Variable XXX nicht mehr vorhanden (Stichword scope).
->1. Die Variable oberhalb der while-Schleife deklarieren.
Du weist der Variablen XXX mit '=' die neue Zeile als Wert zu. Selbst wenn schon was in XXX stünde, würde es jetzt überschrieben.
->2. Den Wert mit '+=' oder XXX.append(crypt(zeile)) an den string anhängen.

P.S.: warum liest Du nicht gleich die ganze Datei als Block?
 
Hi.

Also erstmal, sowas wie
Code:
while (!f.eof()) {...}
ist falsch! Siehe C++ FAQ 15.4.

Richtig ist grundsätzlich:

1) Lesen.
2) Prüfen ob Lesen erfolgreich.
3) Wenn ja, dann eingelesenen Wert verwenden.

Dann ist die getline Zeile natürlich gefährlich, weil da nicht ausgeschlossen ist, das der Puffer überläuft wenn nämlich eine Eingabezeile mehr als 1024 Zeichen hat.

Verwende doch lieber einen string:
Code:
string str;
getline (f, str);

Dein Hauptfehler ist, das du die Datei "crypt" in der Schleife immer wieder öffnest weil die Variable "f" (die du auch doppelt verwendet hast, was auch nicht ganz so guter Stil ist) innerhalb der Schleife immer wieder neu initialisiert wird.

Code:
ifstream in;
ofstream out;

do {
  string line;
  getline (in, line);

  out << crypt (line) << endl;
} while (in);
 
Ganz so glücklich ist mein Code aber auch nicht (da wird immer ein "endl" zuviel angehängt). Man sollte eben auch selber das einhalten was man predigt. :-(
Code:
ifstream in;
ofstream out;
string line;

while (getline (in, line)) {
  out << crypt (line) << endl;
}
 
Zurück