Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat von »"Deviloper"«
Naja ... bin mir nicht sicher ... std::fstream sollte aber doch von std::ostream und std::istream erben und damit sollte die Position beim lesen nicht identisch mit der beim schreiben sein, oder? kann ebenfalls falsch liegen ...
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> #include <string> #include <fstream> int main() { std::fstream stream( "test.txt", std::ios::in | std::ios::out ); stream << "Dieser Text geht in die Datei" << std::endl; std::clog << "Position: " << stream.tellg() << std::endl; std::clog << "Ausgabe1: " << std::endl; std::string line; while ( std::getline( stream, line ) ) std::cout << line << std::endl; stream.clear(); stream.seekg( 0, std::ios::beg ); std::clog << "Position: " << stream.tellg() << std::endl; std::clog << "Ausgabe2: " << std::endl; while ( std::getline( stream, line ) ) std::cout << line << std::endl; std::cin.get(); } |
Zitat von »"$nooc"«
aha ok.. jetzt hab ich nochmal die deklaration versucht bei der die parameter als pointer übergeben werden.. und auf einmal geht..
he das ging vorher nicht ! :?
Zitat von »"msdn"«
If fail is false, the member function returns rdbuf -> pubseekoff(0, cur, in). Otherwise, it returns pos_type(-1).
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
void readf(std::fstream *src, std::fstream *dest) { if(!src->is_open() || !dest->is_open()) { return; } std::fstream::pos_type size = src->tellg(); // da size (-1) ist schlägt folgendes nat. fehl.. char* buf = new char[size]; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
std::fstream::pos_type size = f.tellg(); f.good(); // true char* buf = new char[size]; f.good(); // true f.seekg(0, std::ios::beg); f.good(); //true f.read(buf, size); f.good(); // false <--- f2.write(buf, static_cast<int>(size)-1); // danach kommt der funktionsaufruf.. aber // irgendwas stimmt dann eben mit 'f' nicht.. readf(&f, &f2); // .. } void readf(std::fstream *src, std::fstream *dest) { if(!src->is_open() || !dest->is_open()) { return; } if(!src->good() || !dest->good()) { return; } std::fstream::pos_type size = dest->tellg(); char* buf = new char[size]; } |
Zitat von »"David_pb"«
Wieso willst du eigentlich unbedingt an deinen Zeigern festhalten?
C-/C++-Quelltext |
|
1 2 3 4 5 |
void copy_file(std::ifstream& src, std::ofstream& dest) throw(std::invalid_argument) { if (!src || !dest) throw std::invalid_argument("invalid file stream"); dest << src.rdbuf(); } |
Zitat von »"$nooc"«
Zitat von »"David_pb"«
Wieso willst du eigentlich unbedingt an deinen Zeigern festhalten?
sind zeiger in dem fall nicht die bessere lösung?
bitte oben nochmal nachlesen, hab was editiert!
Zitat von »"$nooc"«
ja gut um die fehlerabfrage hab ich mich noch nicht gekümmert..
es geht ja um die frage WARUM 'src' fehlerhaft ist..
das frag ich mich..
Zitat von »"$nooc"«
*edit:
löscht clear() eventuell den inhalt der datei? wenn ja wär das schlecht
ich habe vor den inhalt einer datei in eine andere zu schreiben...
*edit2:
oh ich seh grade clear() löscht nur die flags.. mit welcher funktion kann ich neue flags setzen ohne die datei generell neu öffnen zu müssen?
Zitat von »"$nooc"«
nur noch zwei fragen:
warum sind hier pointer nicht die bessere lösung?
Zitat von »"$nooc"«
und wenn ich die datei mit std::ios::out geöffnet habe und auslesen will, muss ich die dann mit close() zu machen und neu mt std::ios::in öffnen, oder kann man das auch einfacher lösen?
Werbeanzeige