fstream exe lesen und anschließend schreiben unterschiedlicher Inhalt.
-
Guten Morgen,
Ich möchte eine Datei via fstream Kopieren und werde bei dieser einfachen Aufgabe echt noch blöd
Jedoch haben die Dateien nach dem Kopieren eine andere CheckSum. CopyFileA und std::copy kann ich in diesem Fall leider nicht verwenden.Jedoch spricht Code mehr als 1000 Wrte also seht selbst.
user@user:~$ g++ test.cpp -o test user@user:~$ ./test user@user:~$ md5sum test 5a0acf8e1e6cbfc20f954eeb0bd3b75b test user@user:~$ md5sum test2 d41d8cd98f00b204e9800998ecf8427e test2 user@user:~$#include <iostream> #include <fstream> #include <sstream> #include <string> int main() { std::ifstream in; in.open("./test", std::ios::in | std::ios::binary); if (!in.is_open()) { return 1; } std::stringstream stream; stream << in.rdbuf(); std::string data = stream.str(); in.close(); std::ofstream out; out.open("./test2", std::ios::out | std::ios::binary); if (!in.is_open()) { return 2; } out << data; out.close(); return 0; }Vielen Dank!
Grüße Unicode-Hater
-
Die Dateigröße sollte dir schon den ersten Anhaltspunkt geben: Die Kopie hat nämlich 0 Bytes. Guck dir Zeile 19 nochmal genau an.
P.S.: Warum überhaupt der doppelte Umweg über sowohl stringstream als dann auch nochmal über string? Mach doch einfach direkt
out << in.rdbuf();
-
Das funktioniert. Danke! Wie kann ich nun aber den Inhalt der Datei die ich einlesen Manipulieren ohne den Inhalt mit den Stringstreams zu zerstören? Oder kann ich den Inhalt nicht in einen std::string einlesen?
user@user:~$ g++ test.cpp -o test -Wall user@user:~$ ./test user@user:~$ md5sum test cf68fbf77586a506860ae13285f09140 test user@user:~$ md5sum test2 cf68fbf77586a506860ae13285f09140 test2 user@user:~$#include <iostream> #include <fstream> #include <sstream> #include <string> int main() { std::ifstream in; in.open("./test", std::ios::in | std::ios::binary); if (!in.is_open()) { return 1; } std::ofstream out; out.open("./test2", std::ios::out | std::ios::binary); if (!in.is_open()) { return 2; } out << in.rdbuf(); out.close(); in.close(); return 0; }Grüße Unicode-Hater
-
Den Tipp mit Zeile 19 (im neuesten Code Zeile 15) solltest du schon befolgen, dann funktioniert auch dein erstes Programm.
-
Manchmal dauert es bei mir etwas länger
Aber hebe jetzt verstanden das ich in nicht schließen darf und dann prüfen in.is_open(). Da muss out.is_open() hin. Hat aber echt lange gedauert 
Vielen Dank für die Geduld
