2012-04-08 4 views
7

Ich schreibe ein C++ - Programm zum Lesen/Schreiben einer großen Datei (wahrscheinlich größer als 60 GB). Durch Googeln des Problems scheint es, dass es eine 2GB Grenze für die Datei io im 32-Bit-System gibt (ich verwende Windows 7 64bit, aber mein Programm wurde mit mingw32 kompiliert). In meinem Programm schreibe ich 10 ganze Zahlen gleichzeitig in die Datei und alle diese Zahlen werden zufällig basierend auf einem Algorithmus generiert. Es scheint, dass das Programm auch laufen kann, wenn die Dateigröße größer als 40 GB ist, aber es gibt keine Möglichkeit für mich zu überprüfen, ob die vom Programm gelesenen Daten wirklich die in der Datei gespeicherten oder einige Junk-Nummern sind. Aber trotzdem meldet das Programm keine Warnung oder Fehler. Ist es wirklich möglich, Dateien mit mehr als 60 GB in einem 32-Bit-Programm zu lesen/schreiben?gibt es 2G Limit für das Lesen/Schreiben von Dateien von C++ fstream?

+0

Mögliches Duplikat von http://stackoverflow.com/questions/301995/write-large-file –

+0

Ich denke, der Link von Carey Gregory beantwortet die 2 GByte-Datei-Limit-Frage. Warum können Sie nicht überprüfen, ob die Zahlen richtig geschrieben sind? Anstatt Zufallszahlen zu schreiben, könnten Sie testen, indem Sie die Zahlenfolge 0 bis 2.147.483.647 (alle positiven 32-Bit-Ganzzahlen), die eine 8-GB-Datei sind, schreiben und dann zurücklesen. – gbulmer

Antwort

1

Es gibt ein Limit für die Dateigröße (4GB max, glaube ich) auf Fat32-Dateisystem. Windows 7 sollte dieses Dateisystem definitiv nicht standardmäßig verwenden.

Auch auf 32-Bit-System gibt es eine Grenze für die Dateigröße, die Sie auf einmal unter Verwendung CreateFileMapping/MapViewOfFile zuordnen können. Fstream verwendet jedoch nicht CreateFileMapping/MapViewOfFile intern, so dass die Dateigröße (abgesehen von Dateisystemgrenzen) nicht begrenzt ist. Und sogar mit CreateFileMapping können Sie einen Teil einer größeren Datei in den Speicher abbilden, so dass es kein Limit neben dem vom Dateisystem auferlegten gibt.

+0

oh, wenn fstream nicht wirklich die Dateigröße begrenzt, dann wird es eine gute Nachricht für mich sein, da ich keine Ahnung habe, wie ich meine Datei in Stücke brechen kann, um die 4GB Grenze zu umgehen. Danke – user1285419

+1

"Windows 7 sollte dieses Dateisystem definitiv nicht standardmäßig verwenden." - Diese Aussage ist zu weit gefasst. Da die Frage jedoch eine 40-GB- oder 60-GB-Datei betrifft, ist es wahrscheinlich nicht auf USB-Flash-Speicher. –

+0

@WindowsProgrammer: exFAT – SigTerm

Verwandte Themen