Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чтение файлов,Строки

5.9K
18 сентября 2006 года
DENWER
35 / / 10.07.2005
Господа,возникла проблема, подскажите пожулуйста:
Мне нужно прочитать содержимое файла в строку.Делаю так:
string fc;//строка с содержиммым файла
char buff[1024];

while(!in.eof())
{
in.getline(buff,sizeof(buff));
fc.append(buff);

}
in.close();
Всё нормально работает если размер файла не больше 2KB. Иначе прога виснет на несколько минут, а затем выдаёт Исключение Вида: raised exception class std::bad_alloc with message 'Exception Object Address..'
Пробовал увеличить размер buff - работает если размер buff превосходит размер файла. Но такой вариант не подходит. Подскажите как можно выйти из этой ситуации. Заранее благодарен.
1
18 сентября 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=DENWER]Господа,возникла проблема, подскажите пожулуйста:
Мне нужно прочитать содержимое файла в строку.Делаю так:
string fc;//строка с содержиммым файла
char buff[1024];

while(!in.eof())
{
in.getline(buff,sizeof(buff));
fc.append(buff);

}
in.close();
Всё нормально работает если размер файла не больше 2KB. Иначе прога виснет на несколько минут, а затем выдаёт Исключение Вида: raised exception class std::bad_alloc with message 'Exception Object Address..'
Пробовал увеличить размер buff - работает если размер buff превосходит размер файла. Но такой вариант не подходит. Подскажите как можно выйти из этой ситуации. Заранее благодарен.[/QUOTE]
Проверяй поток на ошибки.
Делай или так:
 
Код:
while(in){
...
}

или так:
 
Код:
while(!in.eof&&!in.fail())
{
...
}

Проблема не в размере буфера.
З.Ы. И приводя свой код, используй пожалуйста форматирование.
3
18 сентября 2006 года
Green
4.8K / / 20.01.2000
Используя функцию std::getline можно обойтись без буфера фиксированного размера:
 
Код:
string str;
getline(in, str);
332
19 сентября 2006 года
Valiant
416 / / 27.09.2004
вот пример специфичный для моего приложения
если надо чего то объяснить обращайся
 
Код:
FILE *ReadF;
        ReadF=fopen(FileName.c_str(), "r");
        char  rline[84];
        do{

        fgets(rline,84,ReadF);
        if (feof(ReadF)) break;
        if (rline[strlen(rline)-1]== '\n') rline[strlen(rline)-1]=0;
        }while(true);
        fclose(ReadF);

кстати такой код перебирает за 2-3 минуты 5-6 тысяч файлов
в каждом файле от 1 до 5000 строк
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог