_fseeki64 mit Code::Blocks
-
Hallo,
ich möchte in großen Dateien seeken und bin dabei auf das Problem gestoßen, dass mit fseek bei 2 GiB Schluss ist. Das lässt sich leider auch nicht umgehen, indem man in kleinen Schritten voran-"seekt" (mit SEEK_CUR).Des Problems Lösung soll angeblich in fseeko64 für Linux und _fseeki64 für Windows liegen. Nur, egal welches von beiden ich verwende, ich bekomme immer die gleichen Fehler:
'fseeko64' was not declared in this scope
'_fseeki64' was not declared in this scopeAuch einige Variationen des Funktionsnamens habe ich schon ausprobiert, wie etwa fseeko oder _fseeko64. Aber es hilft alles nix.

Ich verwende Code::Blocks 12.11 auf Windows mit dem mitgelieferten MinGW-Compiler. In der zugehörigen Datei stdio.h sind auch Funktionen mit den beiden oben genannten Namen deklariert. Nur leider ist alles in irgendwelchen #ifdef-Konstrukten verschachtelt.
Weiß jemand, wie der offizielle Weg aussieht, um an die genannten Funktionen zu kommen? Auf WinAPI habe ich nämlich absolut keine Lust...
Für jede Hilfe wäre ich sehr dankbar!
-
Das ist keine C++-Frage.
Unter OpenSuse ist kein fseeko64 dokumentiert, d.h. es gibt nur fseeko. Als 64 Bit Programm übersetzt ist off_t 8 Byte lang, sollte also große Dateien verarbeiten können. Da fseek long benutzt, dürfte es damit dann auch funktionieren. Für 32 Bit kann man für fseeko das Define _FILE_OFFSET_BITS auf 64 definieren, dann ist off_t ebenfalls 8 Byte breit. Das kann man mit "man fseeko" nachlesen.
Zu Windows kann ich nichts sagen.
-
manni66 schrieb:
Das ist keine C++-Frage.
Jetzt wo du's sagst - stimmt. fseek wurde ja von C mitgebracht. Also notfalls bitte verschieben.
manni66 schrieb:
Unter OpenSuse ist kein fseeko64 dokumentiert, d.h. es gibt nur fseeko.
fseeko habe ich wie gesagt auch schon probiert. Hat aber nicht geklappt (wie auf Windows zu erwarten). Laut MSDN müsste in der Headerdatei stdio.h jedoch _fseeki64 deklariert sein. Nur bei mir scheinbar nicht (ohne irgendwelche #defines).
