Getline и 16h (26d) персонаж - PullRequest
       14

Getline и 16h (26d) персонаж

1 голос
/ 29 мая 2010

в среде VC ++. Я использую (строку) функцию 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

Спасибо за любую информацию.

Кр

Ответы [ 3 ]

2 голосов
/ 29 мая 2010

Да, Ctrl + Z был символом файла EOF для текстовых файлов в древних операционных системах. Это управляющий символ, который действительно не должен присутствовать в текстовом файле, его невозможно перевести. Openmode :: binary - это все, что вы можете сделать, если это необходимо.

0 голосов
/ 29 мая 2010

Я обычно предпочитаю открывать файл в двоичном виде, читать данные с помощью функции ниже и анализировать '\ 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);
}
0 голосов
/ 29 мая 2010

Замените getline функцией прокрутки вручную, которая читает символ за символом до конца строки или eof, как вы определяете.

...