在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
感谢您提供任何信息。
克拉
答案 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);
}