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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
14.03.2011, 10:30     При построчном чтении файла eof наступает раньше срока #1
Здравствуйте, товарищи!

Столкнулся с такой проблемой:
при построчном потоковом чтении файла (при помощи 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[]
Заранее спасибо за ответы!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2011, 10:30     При построчном чтении файла eof наступает раньше срока
Посмотрите здесь:

Иероглифы при чтении из файла C++
Ошибка при чтении файла C++
C++ Почему событие eof() файлового потока наступает очень поздно? Какова вообще его логика?
C++ bool при чтении из файла
фейл при чтении из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.03.2011, 11:16     При построчном чтении файла eof наступает раньше срока #2
C++
1
2
3
    while (file.getline(temp, sizeof temp)) {
        ;
    }
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
14.03.2011, 13:01  [ТС]     При построчном чтении файла eof наступает раньше срока #3
Это не поможет, так как getline при чтении данной строки устанавливает бит eofbit.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
14.03.2011, 13:32     При построчном чтении файла eof наступает раньше срока #4
Цитата Сообщение от Haster Посмотреть сообщение
При детальном изучении вопроса выяснил, что все ломается после попытки считывания строки,
содержащей символ с кодом 0x1.
Вообще строковые функции не всегда адекватно работают со спец.символами (первые 32 в таблице ASCII). Если файл содержит такие символы, лучше открывать его в бинарном режиме, и использовать read/write функции.
Yandex
Объявления
14.03.2011, 13:32     При построчном чтении файла eof наступает раньше срока
Ответ Создать тему
Опции темы

Текущее время: 23:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru