Сбой Fopen для двоичного файла - PullRequest
2 голосов
/ 17 ноября 2009

У меня огромный двоичный файл размером 2148181087 байт (> 2 ГБ)

Я пытаюсь сделать fopen (file, "r"), и это не удалось с

Не могу открыть: xyz файл (тоже значение большой для хранения в типе данных)

Я прочитал на странице справки ошибка EOVERFLOW, когда размер файла> 2 ГБ.

Странно то, что я использую другой входной файл, который также "почти" такой же большой, как и первый файл 2142884400 байт (также> 2 ГБ), fopen прекрасно работает с этим.

Есть ли ограничение на размер файла для fopen или есть альтернативный способ решить эту проблему?

Ответы [ 2 ]

6 голосов
/ 17 ноября 2009

Отсечка составляет 2 ГБ, что, в отличие от того, что вы думаете, равно , а не 2 000 000 000 (2x1000 3 ).

Это 2 147 483 648 (2x1024 3 ). Таким образом, ваш второй файл, который работает, на самом деле имеет размер менее 2 ГБ).

2 ГБ в компьютерном мире - всего 2 000 000 000 в глазах производителей жестких дисков, поэтому они могут сказать, что их диски больше, чем они есть на самом деле :-) - это позволяет им сказать, что их диски на самом деле составляют 2,1 ГБ.

5 голосов
/ 17 ноября 2009

«Альтернативный способ решения этой проблемы» зависит от используемой операционной системы / библиотеки.

Для библиотеки GNU C вы можете использовать fopen64 вместо fopen; он использует 64-битные файловые дескрипторы (есть также макрос для fopen использования 64-битных файловых дескрипторов).

Для Windows вам, вероятно, придется переключиться на API управления файлами Win32, с которым вы можете использовать CreateFile.

...