Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
#1

При построчном чтении файла eof наступает раньше срока - C++

14.03.2011, 10:30. Просмотров 1462. Ответов 3
Метки нет (Все метки)

Здравствуйте, товарищи!

Столкнулся с такой проблемой:
при построчном потоковом чтении файла (при помощи getline) бит eof устанавливается раньше,
чем положено (считывается меньше половины файла).
При детальном изучении вопроса выяснил, что все ломается после попытки считывания строки,
содержащей символ с кодом 0x1.
Получается, что eof выставляется при наличие таких символов? Как можно оботи эту проблему?

Ниже привожу код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
    std::ifstream file; 
    file.open("log.txt");
    if (!file) throw FileException();
    while (!file.eof())
    {
        file.getline(temp,sizeof(temp));
        log.push_back(temp);
        if (file.eof())
        {
            std::cout<<"eof ="<<file.rdstate()<<'\n';
            std::cout<<"eof ="<<i<<'\n';
            std::cout<<temp;
        }
        i++;
    }
         ...
Выводит следующее:
C++
1
2
3
4
eof =1
eof =11535
MSG          [49414/02]   ToDo/High        10:12:38.122   ..\Apps\Module_GCA\SsM
anager\SSM_func.c  00425  ss_ussdreq_params.ussd_Data[13] Hex[1a] Char[
В файле данная строка имеет следующий вид:
C++
1
MSG          [49414/02]   ToDo/High        10:12:38.123   ..\Apps\Module_GCA\SsManager\SSM_func.c  02663  PUSR command_data.gstk_address_string.ussd_string.text[12] Hex[1] Char[]
Заранее спасибо за ответы!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2011, 10:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При построчном чтении файла eof наступает раньше срока (C++):

При чтении из файла последние данные считываются дважды !? eof() ? - C++
Есть следующий код: std::ifstream fin(&quot;ParentList&quot;, std::ios::binary); QString str; while(!fin.eof()) { ...

Почему событие eof() файлового потока наступает очень поздно? Какова вообще его логика? - C++
Вот пример, если в папке с программой разместить файл input.txt с числами &quot;1 2 3&quot;, то в векторе sequence будут следующие элементы: 1 2 3 3 ...

Ошибка при вызове метода класса, при чтении из файла - C++
добрый день, пытаюсь считать данные из и запихнуть их в список в файле у меня вот такие данные a01 b10 А и Б надо запихнуть в...

Проверка при чтении из файла - C++
Добрый вечер! В своей программе на одном из этапов я построчно считываю целые числа из файла *.txt. Мне нужно чтобы в файле были только...

фейл при чтении из файла - C++
Вот абсолютно работоспособный код, где чтение и запись выполняются непосредственно в main. #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Ошибка при чтении из файла - C++
Файл открывается, но читаться из него информация не хочется. Исходник int c_array :: save(char *path) { FILE *f; f =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.03.2011, 11:16 #2
C++
1
2
3
    while (file.getline(temp, sizeof temp)) {
        ;
    }
0
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
14.03.2011, 13:01  [ТС] #3
Это не поможет, так как getline при чтении данной строки устанавливает бит eofbit.
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
14.03.2011, 13:32 #4
Цитата Сообщение от Haster Посмотреть сообщение
При детальном изучении вопроса выяснил, что все ломается после попытки считывания строки,
содержащей символ с кодом 0x1.
Вообще строковые функции не всегда адекватно работают со спец.символами (первые 32 в таблице ASCII). Если файл содержит такие символы, лучше открывать его в бинарном режиме, и использовать read/write функции.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 13:32
Привет! Вот еще темы с ответами:

Expression при чтении из файла - C++
Добрый день. Не могу понять - при чтении файла вылетает ошибка(экспрешн stream!=NULL) притом файл создан там же где main.cpp ...

Ошибка при чтении файла - C++
Есть вот такой код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; ...

Ошибка при чтении из файла - C++
Помогите разобраться с чтением из файла. Листинг указан ниже. Программа выполняется полностью, и только перед выполнением последней строки...

Абракадабра при чтении из файла - C++
Добрый вечер! Имеется файл, в котором записан двумерный символьный массив, представляющий собой схему графа, например такой: 0 A B C D...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.03.2011, 13:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru