Вопрос

В среде 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top