ifstream und Char-Arrays



  • hallo,

    ich will mit std::ifstream arbeiten und möchte jetzt ein komplettes Textfile in ein Char-Array einlesen. Muss man das Zeile für Zeile machen? Geht das mit weniger Aufwand? Wie bekommt man heraus, wieviele Zeichen ein Textfile insgesamt hat??



  • Hallo SlimTimmy

    ch will mit std::ifstream arbeiten und möchte jetzt ein komplettes Textfile in ein Char-Array einlesen.

    Kann mich täuschen, aber ich wage zu bezweifeln ob das sinnvoll ist. Was hast du dann mit dem Char-Array vor?

    Muss man das Zeile für Zeile machen?

    Nein!

    Geht das mit weniger Aufwand?

    Bezug?

    Wie bekommt man heraus, wieviele Zeichen ein Textfile insgesamt hat??

    1 Char entspricht 1 Byte. Und die größe der Textfile wirst du wohl noch rausbekommen oder?

    mfg Th3law



  • es ist für einen Parser. Wie bekommt man denn die genaue Größe des Files in Bytes raus?
    Es geht um folgendes:
    Ich will einen Parser schreiben, der sowohl aus einem Textfile als auch aus einem Speicherblock lesen kann. Jetzt möchte ich das aber nicht zweimal implementieren und deshalb will ich dieses File in ein Char-Array umspeichern, damit ich dann beim parsen keine Unterschiede habe.



  • Original erstellt von <SlimTimmy>:
    hallo,
    ich will mit std::ifstream arbeiten und möchte jetzt ein komplettes Textfile in ein Char-Array einlesen. Muss man das Zeile für Zeile machen? Geht das mit weniger Aufwand? Wie bekommt man heraus, wieviele Zeichen ein Textfile insgesamt hat??

    bitte schau mal, obwphl nicht satndard-c++, mmap() oder CreateFileMapping() an. damit würd dein char*-verarbeitender parser mit optimaler performance auch files parsen.



  • Man könnte den Parser mit Input-Iteratoren arbeiten lassen, dann hast du ein generisches Interface, sowohl für Arrays (Iterator = char-Poiner), als auch für ifstreams (Iterator = istream_iterator<char> ).



  • Original erstellt von <SlimTimmy>:
    Ich will einen Parser schreiben, der sowohl aus einem Textfile als auch aus einem Speicherblock lesen kann. Jetzt möchte ich das aber nicht zweimal implementieren und deshalb will ich dieses File in ein Char-Array umspeichern, damit ich dann beim parsen keine Unterschiede habe.

    Ich weiß ja nicht inwiefern du beim parsen hin- und herhüpfen musst, aber wenn du dich mit einem stream zufrieden geben kannst, könntest du auch nur aus istream lesen.
    Die Parse-Funktion nimmt also einen istream, der du dann wahlweise einen ifstream oder zB. einen stringstream übergibst.

    /* hmpf, also wenn ich jetzt drüber nachdenke, ist dass eigentlich dasselbe wie Bashars input_iterator-Vorschlag, nur mit dem Nachteil dass man's vorher in einen stringstream konvertieren müsste */

    [ Dieser Beitrag wurde am 22.05.2003 um 23:29 Uhr von DrGreenthumb editiert. ]



  • wie bekomme ich denn die Größe des Files heraus??
    Ich könnte es ja auch einfach dann binär in einem rutsch einladen.



  • Dr.:

    • bei meinem geht kein putback
    • meins ist ein Template, deins mit Delegation (afaik)


  • also ich denke, dass ich das File einfach binär in ein Char-Array einlesen werde. Allerdings stellt sich jetzt noch die Frage, wie groß denn das File ist!
    Wie geht denn so etwas?



  • Schonmal in der FAQ nachgesehen?



  • vielen Dank. Ist ja ganz einfach, aufs Dateiende zu zeigen und dann sich die Position geben zu lassen!


Anmelden zum Antworten