Michael Wenger wrote:
Hi Christian!
Christian Schneider schrieb am 02.06.2005 15:33 :
ich habe ein kleines C++-Programm geschrieben, mit dem ich aus einer Datei lesen und in dieser einige Änderungen vornehmen will. Ich benutze ifstream. Nun will ifstream aber nicht mit Dateien ab einer Größe von 2GB (weil der Position-Pointer nicht mehr schafft?).
Wie lese ich aus Dateien > 2GB bzw. schreibe in diesen? Bei C-Funktionen wird scheinbar nur ein long zur Positionierung verwendet, also ist da auch bei 2GB Schluss?
Das hängt extrem vom verwendeten Compiler ab. Ab g++ 3.4 sollte es mit C++ möglich sein. Auf [1] steht zumindest dies: | Large File Support (files larger than 2 GB on 32-bit systems).
Für den gcc gibt es Compilerflags: -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
Gruß, Michael
Außerdem könnte es am Filesystem liegen. ext2 hatte früher z.B. ein 2GB-Limit... Falls das Filesystem mitspielt, könnte evtl. auch Memory Mapped I/O helfen (einfach mal man mmap und weitere...). Dann verhält sich die Datei wie Speicher (also wilde Zeigerspiele!). Gruß, Dierk