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?
Antwort
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.
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
"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. –
@WindowsProgrammer: exFAT – SigTerm
- 1. Gibt es technische Gefahren beim Mischen von fstream und stdio?
- 2. Gibt es ein Limit für PHP file_get_contents?
- 3. Gibt es ein Limit für setTimeout?
- 4. Limit für das Posten von Kommentaren
- 5. Abrufen von Dateideskriptor von einem std :: fstream
- 6. Gibt es eine Möglichkeit, das maxRequestLength-Limit von 2 GB Datei-Uploads zu ignorieren?
- 7. Gibt es eine Ausschlussdatei-Äquivalent für das Einschieben von Git?
- 8. Karussell, das Vorschau von HTML-Dateien gibt
- 9. Gibt es irgendeine Art von Import für Android-Layout-Dateien?
- 10. Gibt es eine Negationssyntax für das Dateimuster von git add?
- 11. Gibt es irgendwelche Vorteile für das Lernen von LISP?
- 12. fstream Fehler in C++
- 13. Das JAR-Limit von 4 GB umgehen
- 14. Gibt es ein C++ - Ausführungs/Datenmodell wie das von Python?
- 15. C++ - fstream und ofstream
- 16. Arbeiten mit fstream-Dateien in Overflow-Verkettung in C++
- 17. Überschreitet das Limit für das private Speicherlimit
- 18. C++ Senden von Referenz fstream zu Klassenmember Funktionsproblem
- 19. FILE * von einem std :: fstream erhalten
- 20. Richtiges Casting für fstream Lesen und Schreiben von Elementfunktionen
- 21. das Hochladen von Dateien mit Httpsendrequest C++
- 22. Was ist das Repository-Limit für github.com
- 23. Gibt es ein Item-Limit für große Arrays in Javascript
- 24. C++ fstream überschreiben statt anhängen
- 25. Gibt es ein Codegenerierungstool, das Excel-Dateien als Eingabe akzeptiert?
- 26. C Das Lesen von Dateien stoppt nicht
- 27. Gibt es eine Delphi-Standardfunktion für das Entweichen von HTML?
- 28. Amazon SES Benutzerrichtlinie für das Senden von Limit
- 29. Komponententest für das Hochladen von HTML5-Dateien
- 30. Sperren für Dateien verhindern das Überschreiben von Dateien in ASP.NET
Mögliches Duplikat von http://stackoverflow.com/questions/301995/write-large-file –
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