Datei-Format bestimmen, Datei auslesen



  • Ich schreibe gerade an einer Funktion, die die Formatierungs-Parameter einer ASCII-Datei bestimmt, die benötigt werden, um die Datei sinnvoll auszulesen.

    Stand jetzt läuft das ganze so ab:

    -Öffnen der Datei -> iStream
    -getFormat(istream, settings) (Formatierungs-Parameter in "settings" speichern)
    -Schliessen der Datei

    -Öffnen der (selben) Datei ->neuerIStream
    -Auslesen der Datei (Formatierung der Datei ist nun bekannt!)
    -Schliessen der Datei

    Das heisst ich öffne die selbe Datei zweimal hintereinander. Naja, es läuft, aber schön ist das nicht, oder?

    Irgendwo im Forum habe ich gelesen:
    Weil ihr Kopierkonstruktor private ist (bzw. der von basic_ios ist private, und alle Streams sind davon abgeleitet) ist es nicht möglich Streams zu kopieren.
    Deshalb kann ich wohl nicht einfach den Stream vor dem ersten Auslesen kopieren und beim zweiten Auslesen die Kopie verwenden.

    Hat jemand einen Vorschlag wie man die Sache besser lösen kann?

    Gruss,

    Karl



  • Wieso setzt du beim zweiten Durchlauf den Lesezeiger dea Streams nicht einfach wieder auf den Anfang?



  • Dann könnte sich das Schlissen und erneute Öffnen der Datei sparen. Stimmt.
    Mit welchem Befehl macht man das?

    Danke schonmal

    Karl



  • seekp() für schreibposition
    und seekg() für leseposition
    seekg erwartet als ersten parameter ios::begin/ios::cur/ios::end und der 2. wert ist eine relative positionsangabe zum ersten flag.
    zb währe seekg(ios::beg,5) das 6. zeichen, seekg(ios::end,-5) das 5. letzte.


Log in to reply