开发者

Getline and 16h (26d) character

in VC++ environment Im using (string) getline function to read separate lines in opened file. Problem is that getline takes character 1Ah as end of file and if it is present on the line, whole reading ends prematurely. Is there any solution for this?

Code snippet:

fstream LogFile (Source,fstream::in);
string Line

while (getline(LogFile,Line))
{  ....  }

File contents:

line1text1asdf
line2text2asd //EOF for getline here
line3asdas // this line will never be read by getline

Thank you for any info.

开发者_运维百科

Kra


Yes, Ctrl+Z was the EOF file character for text files in ancient operating systems. It is a control character that really shouldn't be present in a text file, you can't meaningful translate it. Openmode::binary is about all you can do if that's required.


Replace getline with a hand-rolled function that reads in character by character until end of line or eof, as defined by you.


I usually prefer to open the file as binary, read the data with the function below, and parse for '\n' and '\r' to detect end of lines.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜