Grundelegende Frage zu ifstream/ ofstream
-
Hallo
Ich möchte eine Datei über Netzwerk versenden. Mein Beispiel soll das senden aber ersteinmal lokal ermöglichen. So funktioniert es bei mir, nur mit dem Problem, dass ich "nachträglich" noch die restlichen Daten übertragen muss, <= 1024. Zwei anderen Fragen wären da noch, zum einen kann ich die Länge des Streams einfacherer Abfragen und ob die while Schleife nicht anderes realisiert werden kann. Zum einen kann ich nicht so etwas wie eof als Abbruchbedingung nutzen und gibt es eine Alternative zu "seekg", da er ja immer vom Anfang der Datei alles durchliest.Danke für eure Hilfe, hier der Quellcode
int length; char buffer[1024]; ifstream is; is.open ("C:\\me_2.jpg", ios::binary ); ofstream os; os.open("C:\\menew.jpg", ios::binary); // get length of file: is.seekg (0, ios::end); length = is.tellg(); // cout<<length; is.seekg (0, ios::beg); int count = 0; while(count < length) { is.seekg(count, ios::beg); is.read (buffer,1024); os.write(buffer,1024); cout<<count<<" "; count+=1024; } os.close(); is.close();
-
Ohne zu testen, sollte dir dies hier zumindest eine Idee geben:
char buffer[1024]; ifstream is; is.open ("C:\\me_2.jpg", ios::binary ); ofstream os; os.open("C:\\menew.jpg", ios::binary); int count=0; while(is) { is.read (buffer,1024); os.write(buffer,is.gcount()); cout<<count<<" "; count+=is.gcount(); } os.close(); is.close();
edit: Funktioniert wie gewünscht. Entscheidend ist dabei die Verwendung von gcount.
-
Hi everybody
I am a newbie colleague to this place. I look consign to a sententious interdaction with you all.
-
Das geht auch einfacher:
ifstream is("C:\\me_2.jpg", ios::binary ); ofstream os("C:\\menew.jpg", ios::binary); // operator<<(std::ostream&, std::streambuf*) liest den kompletten Quellstrom // und schreibt ihn in den Zielstrom. os << id.rdbuf(); // close ist nicht zwingend notwendig, da das auch der Destruktor erledigen würde os.close(); is.close();