Compiler: Microsoft Visual Studio 2005
Code: Alles auswählen
largefile.exe "einegrossedatei.iso"
sizeof(int) = 4
sizeof(long int) = 4
Filesize appears to be 0 (0 GB)
fread() after 2 GB boundary succeeded
fseek() to 4 GB: Invalid argument
Code: Alles auswählen
largefile.exe "einegrossedatei.iso"
sizeof(int) = 4
sizeof(long int) = 4
Filesize appears to be 0 (0 GB)
fread() after 2 GB boundary succeeded
fseek() to 4 GB: Invalid argument
Code: Alles auswählen
sizeof(int) = 4
sizeof(long int) = 4
fopen(): Value too large for defined data type
Code: Alles auswählen
sizeof(int) = 4
sizeof(long int) = 8
Filesize appears to be 11917148672 (11 GB)
fread() after 2 GB boundary succeeded
fseek() to 4 GB: Invalid argument
Code: Alles auswählen
dd if=/dev/zero of=testdata bs=6442450944 count=3
Edit:./test testdata
sizeof(int) = 4
sizeof(long int) = 8
sizeof(long long int) = 8
Filesize appears to be 6442438656 (5 GB)
fread() after 2 GB boundary succeeded
fseek() to 4 GB: Invalid argument
Und mit Visual Studio 2008:test.exe largeISO.iso
sizeof(int) = 4
sizeof(long int) = 4
sizeof(long long int) = 8
Filesize appears to be 0 (0 GB)
fread() after 2 GB boundary succeeded
fseek() to 4 GB: Invalid argument
test largeISO.iso
sizeof(int) = 4
sizeof(long int) = 4
sizeof(long long int) = 8
Filesize appears to be 0 (0 GB)
fread() after 2 GB boundary succeeded
fseek() to 4 GB: Invalid argument
Code: Alles auswählen
sizeof(int) = 4
sizeof(long int) = 8
Filesize appears to be 21305801767 (19 GB)
fread() after 2 GB boundary succeeded
fseek() to 4 GB: Invalid argument
Das ist richtig. Hast du dir allerdings die Referenz von fseek() angekuckt? Die erwartet nämlich weder "size_t" noch "unsigned int" sondern eben genau "long int", und zwar signed. Das geht klar auf Unix 64 bit, aber auf Windows (sowohl 32 als auch 64 bit) ist das immer noch ein 32-Bit Datentyp.cloidnerux hat geschrieben:Und mal so nebenbei: int ist ein "signed" datentyp, sprich 1 byte geht für das "-"-Zeichen Drauf.
unsigned int braucht das nicht und kann zahlen bis 2^32-1 speichern und nicht nur 2^31-1, was Dateigrößen bis 4GB ermöglicht.
Das Minus wird dementsprechend auch bei 8-Byte variablen sich ungünstig auswirken, da es eben auch wieder nur Zahlen bis 2^63-1 zulässt, was trotzdem noch ne ganze menge ist.
Ist das nicht dann sowieso Bestandteil des neuen C++ Standards?cloidnerux hat geschrieben:So, mal zum Thema der großen Dateien:
So wie ich das sehe, erlaubt boost(boost/filesystem/fstream.hpp) das laden von größeren Dateien.
Die bisherigen test bestätigen dies.
Müssten wir mal sehen ob wir darauf umsteigen, was uns viel arbeit ersparen würde.
Nein, C++ Standard spezifiziert NUR die Sprache.Ist das nicht dann sowieso Bestandteil des neuen C++ Standards?
Naja, der C++ Standard spezifiziert sehr wohl die Standardbibliothek, sogar auf knapp mehr als der Hälfte der Seitencloidnerux hat geschrieben:Nein, C++ Standard spezifiziert NUR die Sprache.Ist das nicht dann sowieso Bestandteil des neuen C++ Standards?