Datei auslesen



  • Hallo,

    mit folgender Schleife lese ich den Inhalt einer Datei aus:

    TFileStream* f=NULL;
    char szBuffer[2000];        //Chararray für Inhalt der pos-Datei
    
    AnsiString as;
    
    f=new TFileStream(posdatei,fmOpenRead);
    while(f->Read(szBuffer, 1500))
    {
    
                  std::string text = szBuffer;    //Umwandlung Chararray in String
    
    }
    
    delete f;
    f=NULL;
    

    Die Anzahl der Zeilen in der Datei variiert. Wie kann ich das jetzt so anpassen, dass immer alle Zeilen bis zum Dateiende gelesen werden? Geht das irgendwie mit eof() ? Außerdem möchte ich jede einzelne Zeile in eine Combobox hinzufügen. Für Hilfe (am besten mit ein paar Codeschnipseln) wäre ich sehr dankbar! Ich verwende den Borland Builder 6.



  • Hallo

    Falls es um eine Textdatei geht, verwende einfach TStringList mit desen Methode LoadFromFile. Dann werden dir alle Zeilen automatisch aufgesplittet.

    Falls du wirklich mit einem Stream in std::string lesen willst, dann verwende lieber std::fstream. Dann kannst du mit std::getline auch Zeile für Zeile auslesen. Mehr dazu findest du im C++ Forum, vor allem in der dortigen FAQ unter dem Titel "Dateien und Ströme".

    bis bald
    akari



  • Vielen Dank! Habs jetzt mit fstream und getline() gelöst.



  • Hab noch ein kleines Problem, was sicherlich einfach lösbar ist aber ich kriegs nicht auf die Reihe 😞

    ich öffne mit

    fstream f("C:\\Test\\test.txt", ios::out | ios::in);
    

    die Datei. Nun möchte ich den Pfad zur Datei aus einer Editbox holen und an fstream übergeben. Das hab ich versucht mit:

    AnsiString aspath;
    string strpath;
    aspath = Edit1->Text;
    strpath = aspath.c_str();
    

    Und wenn ich das dann an fstream übergebe, bekomme ich den Fehler:

    "E2285 Keine übereinstimmung für 'fstream::basic(string,enum)' gefunden"

    Was mach ich falsch?



  • Hallo

    std::string brauchst du nicht. std::fstream erwartet einfach einen const char*, undd en kannst du auch direkt aus AnsiString holen.

    AnsiString aspath;
    fstream f(aspath.c_str(), ios::out | ios::in);
    

    bis bald
    akari



  • danke!


Anmelden zum Antworten