Problem beim mehrfachem Datei öffnen/lesen
-
Hast du mal versucht, wenn du den ifstream mit dem Zusatz öffnest, dass er zum Dateianfang springen soll oder nach dem öffnen das machst.
Interessant wär mal zu testen, was dein Code macht, wenn die erste Datei kleiner als die zweite ist.
-
Ich habe den Code jetzt mal ein bisschen verändert:
for(deque<string>::iterator i=files.begin();i != files.end();i++) { dat_ein.open(i->c_str(), ios_base::in); MessageBox(0,i->c_str(),0,0); if(!dat_ein) { MessageBox(0,"Test",0,0); dat_ein.close(); return false; } if(dat_ein.eof()) { MessageBox(0,"eof, Fatal Error",0,0); } while(!dat_ein.eof()) { getline(dat_ein, deutsch, '|'); getline(dat_ein, fremdsprache, '|'); getline(dat_ein, zusatz, '|'); counter++; if(options.richtung == 0) { voctemp.heimatsprache = deutsch; voctemp.fremdsprache = fremdsprache; } else { voctemp.heimatsprache = fremdsprache; voctemp.fremdsprache = deutsch; } voctemp.bemmerkungen = zusatz; voctemp.fach = 1; vok->push_back(voctemp); } dat_ein.close(); }Ich kriege jetzt auch manchmal die Test MessageBox, was bedeuten würde das er die Datei manchmal nicht richtig öffnen kann, ich versteh langsam gar nichts mehr. Ich habe mal probiert eine kurze dann eine lange Datei zu öffnen mit dem Fehler das auch ein eof Auftritt. (Die If-Abfrage mit dem eof wird auch manchmal ausgeführt. Kann jemmand sonst das mal bei sich compeliern und mir sagen ob es läuft. Langsam glaube ich nämlich das mein Compiler spinnt...
-
Um an den Anfang zu springen.
dat_ein.open(i->c_str(), ios_base::in); dat_ein.seekq(0,ios::beg); //oder nur dat_ein.seekq(0); MessageBox(0,i->c_str(),0,0);
-
Was mir noch einfällt - ich bin nicht sicher, ob close() bzw. open() die Dateiflags wieder zurücksetzen. Also würde ich das sicherheitshalber noch manuell erledigen.
-
clear() haste vergessen.
-
wisser schrieb:
clear() haste vergessen.
genau, das wars man muss scheinbar hinter close noch .clear() aufrufen. Jetzt gehts
-
Alternativ kann man auch guten Code schreiben. (Für jede Datei ein neues ifstream Objekt)
-
altern. schrieb:
Alternativ kann man auch guten Code schreiben. (Für jede Datei ein neues ifstream Objekt)
das ist eher schlechter code, da du unnötig speicher verschwendest. Da du ja sowieso zur Zeit nur eine Datei brauchst.
-
ne, wird doch dann bei jedem schleifendurchgang zerstört.
-
So meinst du das also, ja das geht natürlich, obwohl ich glaube das die Methode mit dem clear schneller ist. Müsste man mal überprüfen...