![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Annuta |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 3.10.2006 Где: Dubna Репутация: нет Всего: 1 |
Привет!
Не кидайте камнями, не нашла я решения в инете. Есть файл размером 7 Гб. fopen не работает. Способ с выделением памяти типа
тоже не работает, нет столько памяти. Мне бы прочитать файл и разбить на куски по-меньше. Желательно с помощью fopen, но не обязательно. Но как ? --------------------
Программист - это комбинация лени и логики ! |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
а как fopen должен работать? 1) открываешь (fopen, open) 2) создаешь временный буфер (malloc, только не все 7 гигов) 3) открываешь второй файл куда будет производиться запись 4) читаешь блоками (fread, read) 5) пишешь (fwrite, write) 6) подсчитываешь размер записаной информации, повторяешь пункты 4-6, при достижении некоторого размера переходишь к пункту 7 (внешний цикл) 7) повторяем пункты 3-7, пока есть что читать -------------------- undefined |
|||
|
||||
Annuta |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 3.10.2006 Где: Dubna Репутация: нет Всего: 1 |
fish9370, спасибоо за ответ.
Хорошо, разбить на куски поможет. А в принципе - это единственный способ работать с такими объёмами ? Неужели человечество ничего не придумало лучше, чем всё поделить ? --------------------
Программист - это комбинация лени и логики ! |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
тебе надо задать себе следующие вопросы: - у тебя в системе сколько физической памяти? - а оперционная система какой разрядности? если физической памяти достаточно, и операционная система позволяет, то можно и весь файл в память загрузить.. но на практике работают с блоками.. и потом, вся информация между операционной системой и блочным устройством (жесткий диск) передается блоками, такова архитектура - она зарекомендовала себя с хорошей стороны на протяжении десятков лет.. -------------------- undefined |
|||
|
||||
Annuta |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 3.10.2006 Где: Dubna Репутация: нет Всего: 1 |
Возвращает нулевой указатель после вызова fopen. Он не открывает файл вообще. (( --------------------
Программист - это комбинация лени и логики ! |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Добавлено через 2 минуты и 16 секунд Как работать с большими файлами -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
fish9370 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
да Анюта, действительно есть такая проблема (сам о ней не знал), поговаривают нужно просто прописать предварительно
или при сборке добавить
мне так же интересно, откроет ли его системный вызов open, если не затруднит - попробуйте.. с параметром O_LARGEFILE Это сообщение отредактировал(а) fish9370 - 11.3.2013, 17:18 -------------------- undefined |
||||
|
|||||
Annuta |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 3.10.2006 Где: Dubna Репутация: нет Всего: 1 |
fish9370, Спасибо за совет!
не помог, открыла и читала всё ofstream. Ну а дальше куски по-меньше можно и fopen. Спасибо за помощь! --------------------
Программист - это комбинация лени и логики ! |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Annuta, а зачем тебе делить на куски? Читай сразу через ifstream.
|
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
ifstream где-то в глубине использует fopen или open... Раз ifstream открывает, то и open может, видимо.
Действительно, стримы уже сами по себе поддерживают буферизацию, так что зачем велосипед на коленке городить. -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |