Вопрос
В среде VC ++ IM использую (строку) функцию GetLine для чтения отдельных строк в открытом файле. Проблема в том, что GetLine принимает персонаж 1ah в качестве конца файла, и если он присутствует на линии, все чтение заканчивается преждевременно. Есть ли решение для этого?
Кодовый фрагмент:
fstream LogFile (Source,fstream::in);
string Line
while (getline(LogFile,Line))
{ .... }
Содержание файла:
line1text1asdf
line2text2asd //EOF for getline here
line3asdas // this line will never be read by getline
Спасибо за любую информацию.
Красавица
Решение
Замените GetLine с ручной ручной функцией, которая читает характер по символу до конца строки или EOF, как определено вами.
Другие советы
Да, Ctrl + z был символом файла EOF для текстовых файлов в древних операционных системах. Это контрольный символ, который действительно не должен присутствовать в текстовом файле, вы не можете подсматривать его. OpenMode :: Binary - это все, что вы можете сделать, если это требуется.
Я обычно предпочитаю открывать файл в качестве двоичного, прочитал данные с функцией ниже, а также анализировать « n» и « R», чтобы обнаружить конец строк.
UINT xread(HFILE hfile, void *buf, UINT size)
{
UINT ret;
#if defined(_WIN32)
ret = _read(hfile, buf, size);
#elif defined(_LINUX) || defined(__APPLE__)
ret = read(hfile, buf, size);
#endif
return(ret);
}