1

在 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

感谢您提供任何信息。

克拉

4

3 回答 3

2

是的,Ctrl+Z 是古代操作系统中文本文件的 EOF 文件字符。它是一个真正不应该出现在文本文件中的控制字符,你不能有意义地翻译它。如果需要,Openmode::binary 几乎是您所能做的。

于 2010-05-29T16:31:53.590 回答
-1

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

于 2010-05-29T16:30:22.010 回答
-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);
}
于 2010-05-29T17:48:06.910 回答