Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> открыть большой файл 
V
    Опции темы
IIGGOORR
Дата 22.9.2009, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Добрый День!

Хочу прочитать большой файл (25 Мб):

Код

ifstream fsrc;

fsrc.open( "test.bmp", ios::in | ios::binary );
if( fsrc.fail() ) throw runtime_error("Problem to open source file");


Если читать "маленький файл" (4 Мб), то всё работает, если читать "большой" (25 Мб), то программа падает.

Вопрос: Как мне организовать чтение файла по частям?

Спасибо.
PM MAIL   Вверх
zim22
Дата 22.9.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(IIGGOORR @  22.9.2009,  19:56 Найти цитируемый пост)
Вопрос: Как мне организовать чтение файла по частям?

так


--------------------
PM MAIL   Вверх
IIGGOORR
Дата 23.9.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Спасибо. Сделал как указано по ссылке:

Код


ifstream fsrc( fname, std::ios::binary );

const int chunk_size = 1000000;
std::vector<char> vc(chunk_size);
std::vector<char> vec_hdr(54);

fsrc.read(&vec_hdr.front(), 54);      // считываю заголовок BMP-файла



Когда я считываю заголовок BMP-файла, то там вместо реальных данных получается вектор из нулей (vec_hdr), а это не верно, что я делаю не так?
PM MAIL   Вверх
zim22
Дата 23.9.2009, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(IIGGOORR @  23.9.2009,  12:51 Найти цитируемый пост)
 а это не верно, что я делаю не так?

не знаю smile
iffstream успешно файл открывает?


--------------------
PM MAIL   Вверх
IIGGOORR
Дата 23.9.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



нет, не успешно :(

на:

Код

if( fsrc.fail() ) {cout << "\nopen fail\n";}


приложение написало в консоль: "open fail".

В чём может быть проблема?
PM MAIL   Вверх
zim22
Дата 23.9.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



покажи, как ты имя файла указываешь
что в переменной fname содержится


--------------------
PM MAIL   Вверх
IIGGOORR
Дата 23.9.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Спасибо. Нашёл ошибку, я, действительно, неправильно задавал имя файла при отладке.
PM MAIL   Вверх
bsa
Дата 23.9.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



IIGGOORR, напиши проверку так:
Код
if( fsrc.fail() ) {
   int e = errno;
   std::cerr << "file open failed: " << strerror(e) << std::endl;
}

PM   Вверх
IIGGOORR
Дата 25.9.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



zim22, bsa, спасибо за помощь, дело было в том, что при отладке у меня были неправильные пути к BMP-файлам, теперь всё работает.


PM MAIL   Вверх
zim22
Дата 25.9.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



незачто. если ответ на тему получен - пометь её решённой. (в правом верхнем углу экрана под виноградными листиками "ответить", "новая тема", "опрос")


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0654 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.