Getline和16h(26d)角色

时间:2010-05-29 16:19:57

标签: c++ getline

在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 个答案:

答案 0 :(得分:2)

是的,Ctrl + Z是古代操作系统中文本文件的EOF文件字符。它是一个真正不应该出现在文本文件中的控制字符,你无法有意义地翻译它。如果需要,可以使用Openmode :: binary。

答案 1 :(得分:-1)

将getline替换为手动滚动函数,该函数逐个字符地读取,直到您定义的行尾或eof为止。

答案 2 :(得分:-1)

我通常更喜欢将文件打开为二进制文件,使用下面的函数读取数据,并解析'\ 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);
}