2013-09-18 2 views
2

У fread есть ли ограничение по количеству байтов, которое он может прочитать сразу? Или я могу прочитать любой размер, на который я хотел бы поручить мой указатель? Например, Могу ли я прочитать файл 50 МБ после использования fread, чтобы зарядить его в указатель символов?Fread number of bytes limit

ответ

4

Теоретически, да, он может прочитать любое количество байтов до максимума size_t (который является unsigned int (примерно 4 ГБ на 32-битной системе). Однако, так как ваш буфер должен быть выделен в смежный блок, вряд ли возможно и не рекомендуется, чтобы читать в большом файле сразу (и для существенно больших файлов вы, вероятно, не сможете создать буфер памяти, достаточно большой для хранения файла). Как правило, у вас будет меньший буфер и петля над файлом, загружая его в память в кусках.

+0

привет, я благодарю за это посоветую, я был уверен, что у fread/fwrite есть предел. Просто запутался в одном, как вы получили 4gbs? могу я хранить 4gbs с unsigned int (size_t), который вы говорите? извините, если это глупый вопрос, но я действительно запутался. Спасибо за помощь! ура! – 3ryck

1

на практике fread() не будет иметь никаких проблем прихлебывая в файле 50MB. это на самом деле не «большой файл» по современным стандартам. fread() возвращает число жет ms read, и гарантированно возвращает короткий счетчик предметов только в конце файла (если вы запрашивали больше элементов, чем в файле) или ошибку. Вы должны проверить, что количество возвращенных элементов - это то, что вы ожидаете, и, если оно коротко, используйте feof() и ferror(), чтобы различать EOF и ошибку.