2012-04-08 12 views
7

Sto scrivendo un programma C++ per leggere/scrivere un file di grandi dimensioni (probabilmente più grande di 60 GB). Googling il problema, sembra che ci sia un limite di 2 GB sul file io nel sistema a 32 bit (sto usando Windows 7 a 64 bit, ma il mio programma è stato compilato con mingw32). Nel mio programma, sto scrivendo 10 interi alla volta nel file e tutti questi numeri sono generati casualmente in base ad alcuni algoritmi. Sembra che il programma possa essere eseguito anche quando le dimensioni del file superano i 40 GB, ma non c'è modo per me di verificare se i dati letti dal programma sono effettivamente quelli memorizzati nel file o alcuni numeri di posta indesiderata. Ma comunque, il programma non riporta alcun avvertimento o errore. È davvero possibile leggere/scrivere file più grandi di 60 GB in un programma a 32 bit?esiste un limite di 2G per la lettura/scrittura di file da parte di C++ fstream?

+0

Possibile duplicato di http://stackoverflow.com/questions/301995/write-large-file –

+0

Penso che il collegamento fornito da Carey Gregory risponda alla domanda di limite del file da 2 GB. Perché non c'è modo per voi di controllare che i numeri siano scritti correttamente? Invece di scrivere numeri casuali, è possibile testare scrivendo la sequenza di numeri da 0 a 2.147.483.647 (tutti i numeri interi positivi a 32 bit), che sarà un file da 8 GB, quindi rileggerlo. – gbulmer

risposta

1

Esiste un limite per le dimensioni del file (massimo 4 GB, credo) sul file system Fat32. Windows 7 sicuramente non dovrebbe usare quel filesystem di default.

Anche sul sistema a 32 bit esiste un limite per le dimensioni del file che è possibile mappare in memoria in una sola volta utilizzando CreateFileMapping/MapViewOfFile. Tuttavia, fstream non utilizza CreateFileMapping/MapViewOfFile internamente, quindi non c'è limite alla dimensione del file (oltre ai limiti del filesystem). E anche con CreateFileMapping puoi mappare porzioni di file più grandi in memoria, quindi non c'è limite oltre a quello imposto dal filesystem.

+0

oh, se fstream non ha veramente un limite sulle dimensioni del file, sarà una grande notizia per me dato che non ho idea di come spezzare il mio file in pezzi per evitare il limite di 4 GB. Grazie – user1285419

+1

"Windows 7 sicuramente non dovrebbe usare quel filesystem di default." - Questa affermazione è troppo ampia. Tuttavia, poiché la domanda riguarda un file da 40 GB o 60 GB, probabilmente non si trova nella memoria flash USB. –

+0

@Windowsprogrammer: exFAT – SigTerm

Problemi correlati