Datei mit fstream wieder von vorne lesen?
-
Hi,
ich moechte eine Textdatei auslesen und in ein dynamisch erstelltes Array schreiben. Dazu muss ich aber vorher wissen, wie viele Zeilen in einer Datei sind. Bisher zaehle ich diese. Danach kann ich die Datei aber nicht mehr auslesen, da ich schon am Ende der Datei bin. Wie kann ich sie wieder von vorne lesen?
Wenn ich mit
File * blabla;
arbeite habe ich den rewind Befehl, aber ich arbeite mit fstream
Schonmal Danke fuer die Hilfe, fuer euch ist das bestimmt kein Problem.

-
Zoidberg schrieb:
File * blabla;
arbeite habe ich den rewind Befehl, aber ich arbeite mit fstreamHallo,
Die c++ filestreams besitzen die Methoden seekg()/seekp() und tellg()/tellp(), diese setzen den Lese/Schreib Dateizeiger bzw. geben dir die Position des Lese/Schreib Dateizeiger zurück. Siehe nach den Methoden am besten auf http://www.cppreference.com.Dein Vorgehen ist allerdings sehr unperformant. Ich würde dir lieber etwas a la
#include <fstream> #include <iterator> #include <algorithm> #include <string> #include <vector> using namespace std; int main() { vector<string> file_content; ifstream in("deine_input_datei.txt", ios::binary); if(in) { copy(istream_iterator<string>(in), istream_iterator<string>(), back_inserter(file_content)); } // jetzt steht der Inhalt der Text-Datei in file_content... }vorschlagen.
Gruß Caipi
-
mit fstream::seekg(ios::beg);
-
Danke, es tut

Aber gerade zu dem Teil mit ios::beg konnte ich keine Dokumentation finden.
Ist das irgendwie nicht standart ? Funktionieren tut's.Caipi schrieb:
Dein Vorgehen ist allerdings sehr unperformant.
Stimmt. Aber ich mach grad ne Studienarbeit, und die verlangt ein dynamisch erstelltes Array. Und jedes mal wenn ich den Prof frage, ob eine andere Vorgehensweise nicht besser waere kommt nur "Stick to the assignment. Stick to the assignment!"
Also von mir aus. Mach ich es halt so
Ne Moeglichkeit waere noch, das Array dynamisch wachsen zu lassen, aber dann muss ich den ganzen gruscht immer hin und her kopieren. Denke das ist performance technisch auch nicht viel besser, und wohl auf jeden Fall mehr arbeit...
-
ios_base::beg dann solltest es finden, da ios aber von ios_base abgeleitet ist, kannst stattdessen auch einfach ios::beg schreiben