Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Чтение больших файлов |
Автор: Annuta 11.3.2013, 14:37 | ||
Привет! Не кидайте камнями, не нашла я решения в инете. Есть файл размером 7 Гб. fopen не работает. Способ с выделением памяти типа
тоже не работает, нет столько памяти. Мне бы прочитать файл и разбить на куски по-меньше. Желательно с помощью fopen, но не обязательно. Но как ? |
Автор: fish9370 11.3.2013, 14:46 |
а как fopen должен работать? 1) открываешь (fopen, open) 2) создаешь временный буфер (malloc, только не все 7 гигов) 3) открываешь второй файл куда будет производиться запись 4) читаешь блоками (fread, read) 5) пишешь (fwrite, write) 6) подсчитываешь размер записаной информации, повторяешь пункты 4-6, при достижении некоторого размера переходишь к пункту 7 (внешний цикл) 7) повторяем пункты 3-7, пока есть что читать |
Автор: Annuta 11.3.2013, 14:59 |
fish9370, спасибоо за ответ. Хорошо, разбить на куски поможет. А в принципе - это единственный способ работать с такими объёмами ? Неужели человечество ничего не придумало лучше, чем всё поделить ? |
Автор: Annuta 11.3.2013, 16:53 |
Возвращает нулевой указатель после вызова fopen. Он не открывает файл вообще. (( |
Автор: feodorv 11.3.2013, 16:59 | ||||
Добавлено через 2 минуты и 16 секунд http://hashcode.ru/questions/83150/c-%D0%BA%D0%B0%D0%BA-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C-%D1%81-%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%BC%D0%B8-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D0%BC%D0%B8 |
Автор: fish9370 11.3.2013, 17:16 | ||||
да Анюта, действительно есть такая проблема (сам о ней не знал), поговаривают нужно просто прописать предварительно
или при сборке добавить
мне так же интересно, откроет ли его системный вызов open, если не затруднит - попробуйте.. с параметром O_LARGEFILE |
Автор: Annuta 12.3.2013, 11:11 | ||
fish9370, Спасибо за совет!
не помог, открыла и читала всё ofstream. Ну а дальше куски по-меньше можно и fopen. Спасибо за помощь! |
Автор: xvr 12.3.2013, 11:40 | ||
Можно мэпировать в память по кускам. Интерфейс зависит от ОС |
Автор: bsa 12.3.2013, 15:04 |
Annuta, а зачем тебе делить на куски? Читай сразу через ifstream. |
Автор: Earnest 14.3.2013, 08:57 |
ifstream где-то в глубине использует fopen или open... Раз ifstream открывает, то и open может, видимо. Действительно, стримы уже сами по себе поддерживают буферизацию, так что зачем велосипед на коленке городить. |