2012-04-08 2 views
7

Я пишу программу C++ для чтения/записи большого файла (возможно, более 60 ГБ). Исходя из проблемы, похоже, что в 32-битной системе существует ограничение 2 ГБ на файл io (я использую Windows 7 64bit, но моя программа была скомпилирована с помощью mingw32). В моей программе я пишу по 10 целых чисел за раз в файл, и все эти числа генерируются случайным образом на основе некоторого алгоритма. Кажется, что программа может работать даже тогда, когда размер файла больше 40 ГБ, но нет возможности проверить, действительно ли данные, прочитанные программой, хранятся в файле или некоторые нежелательные номера. Но в любом случае программа не сообщает никаких предупреждений или ошибок. Действительно ли это возможно для чтения/записи файла размером более 60 ГБ в 32-битной программе?Есть ли ограничение 2G для чтения/записи файла C++ fstream?

+0

Возможный дубликат http://stackoverflow.com/questions/301995/write-large-file –

+0

Я думаю, что ссылка, предоставленная Кэри Грегори, отвечает на вопрос о 2GByte-файле. Почему нет способа проверить правильность написания чисел? Вместо того, чтобы записывать случайные числа, вы можете протестировать, записав последовательность чисел от 0 до 2,147,483,647 (все положительные 32-битные целые числа), которая будет 8-гигабайтным файлом, а затем прочитает ее. – gbulmer

ответ

1

В файловой системе Fat32 существует ограничение по размеру файла (максимально 4 ГБ). Windows 7 определенно не должна использовать эту файловую систему по умолчанию.

Также на 32-битной системе существует ограничение на размер файла, который можно сразу отобразить в память с помощью CreateFileMapping/MapViewOfFile. Однако fstream не использует CreateFileMapping/MapViewOfFile внутренне, поэтому нет ограничений на размер файла (кроме ограничений файловой системы). И даже с помощью CreateFileMapping вы можете отображать часть более крупного файла в память, поэтому нет ограничений, кроме того, что наложено файловой системой.

+0

oh, если fstream на самом деле не имеет ограничения на размер файла, чем это будет отличная новость для меня, так как я не знаю, как разбить мой файл на части, чтобы избежать ограничения на 4 ГБ. Спасибо – user1285419

+1

«Windows 7 определенно не должна использовать эту файловую систему по умолчанию». - Это утверждение слишком велико. Однако, поскольку вопрос включает файл размером 40 ГБ или 60 ГБ, вероятно, это не на флэш-памяти USB. –

+0

@Windowsprogrammer: exFAT – SigTerm

Смежные вопросы