fseek

kurcob

Mitglied
Hallo,

habe eine Datei, Inhalt:

123
456
234
345
567
563

wie kann ich mich mit fseek da an die dritt letzte zeile an denanfang setzen?
 
Ich gehe mal davon aus, dass dir die grundsätzliche Funktion von "fseek" bekannt ist, ansonsten hier noch mal die Funktionsdeklaration:
C++:
int fseek( 
   FILE *stream, // FILE-Pointer
   long offset,  // Anzahl der Bytes von 'origin'
   int origin    // Startposition
);

Sofern die Datei immer der gleichen Aufbau hat, also 3 Zeichen pro Zeile, definierter Zeilenumbruch (oder nicht) am Ende und keine "verirrten" Leerzeichen o.ä., geht's recht einfach:
- 'origin' bekommt den Wert 'SEEK_END'
- 3 x 3 Bytes für die 3 Zeilen = 9 Bytes
- 2 (oder 3 bei Umbruch am Dateiende) x Umbruch (Windows = 2 Byte, Unix = 1 Byte) = 4 Byte (z.B. Windows, ohne Endeumbruch)
- macht im Ergebnis 13 Bytes die bei 'offset' mit negativen Vorzeichen eingesetzt werden.

Ist die Dateistruktur nicht so fix, hilft nur die gesamte Datei einzulesen und zu parsen um die gewünschte Position zu ermitteln.

Gruß
MCoder
 
Zurück