Einlesefehler

  • Ich hab folgenden Abschnitt der mir eine Mehrzeilige Datei (txt in dem fall) einlesen soll.

    funktioniert auch soweit, nur dass er mehr einliest als es soll:

    Code:
    FILE *target;
    char * content;

    target = fopen(src_file, "r");
    lFileLen = filelength(target->_file);
    content = new char[lFileLen];
    fread(content, 1, lFileLen, target);
    fclose(target);
    cout << content << endl;

    Auch ifstream, fstream versionen habe ich probiert, aber das problem ist überall dasselbe...
    ich möchte die mehrzeilige datei exakt auslesen, verarbeiten und wieder speichern... das verarbeiten und speichern macht keine probleme, aber das auslesen muckt rum ohne ende...
    sitze hier jetzt schon seit einer woche dran, bin richtig gefrustet und hab c++ schon als hoffnungslos abgestempelt. Die gesamte Datei muss in einem dynamischen Zeiger gespeichert sein! Wie groß dieser ist ist egal.

    Die Zeichen die nicht dazugehören sind meist so aufgebaut:
    1 '=' für jede Zeile die die Datei hat wird am ende des eigentlichen Strings angehängt.
    sowie danach eine (zufällige?) anzahl an '²' und fetten ':'

    Eigentlich dürfte er nach syntax nur die datei einlesen und in Content wäre eigentlich auch nicht mehr platz... aber trotzdem passiert dies...
    Meine Lehrer wussten auch nicht weiter :(

    Wär toll wenn ihr da was wüsstet oder evtl sogar glaich ne lösung habt die ne Datei korrekt einliest

  • Hallo!
    filelength ist kein Standard-C++!
    Wenn du keinen Platz verschenken möchtest, lies zeilenweise und schreib es in einen string.
    Ansonsten kannst du auch char* mit sehr großer Länge anlegen und dann füllen.
    Oder du zählst erst einmal in einer Schleife und nimmst dann fgets.

    Viele liebe Grüße
    The User

    PS:
    Hier stehts:
    http://www.cplusplus.com/doc/tutorial/files.html

    PPS:
    Schau dir mal an, was ich da gefunden habe: :roll:
    http://www.cplusplus.com/reference/string/string/reserve/
    Dateizeiger ans Ende setzen, Zähler zurückgeben lassen, in Schleife einlesen oder eben mit read...

  • Zitat

    Ansonsten kannst du auch char* mit sehr großer Länge anlegen


    Ungern

    Da die Dateien beliebig groß sein können...

    Zitat

    filelength ist kein Standard-C++!


    Macht nix... in dem Fall gibt es die Korrekte Dateigröße zurück, wurde unabhängig überprüft.
    Liegt auch nicht daran... er liest einfach mehr ein als die filegröße... oder er ignoriert die angabe... oder was weiß ich woher diese komischen zeichen kommen...

    Zitat

    Wenn du keinen Platz verschenken möchtest, lies zeilenweise und schreib es in einen string.


    Kann leider nicht auf Strings umschreiben da der rest des funktionsfähigen Programms den Inhalt in einem Zeiger auf char haben muss.

    Zitat

    Oder du zählst erst einmal in einer Schleife und nimmst dann fgets.


    Beispiel?
    ich versehs grad net...

    Vielen Dank für die Antwort erstma

  • Also ich bin hierfür:
    1. Du nimmst einen C++-string und ersparst dir den Low-Level-Kram
    2. -Du setzt den Dateizeiger beim Öffnen auf das Ende der Datei
    -Du fragst mit tellg die Position ab
    -Du legst mit der Länge ein char-Array an
    -Du springst mit setg an den Anfang
    -Du liest in das char-Array ein
    Warum verwendest du denn C-Strings? Das ist doch ziemlicher Blödsinn. Damit hälst du dauernd die Entwicklung an alten C-Problemchen auf, anstatt High-Level zu programmieren.

    Viele liebe Grüße
    The User