Question

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

Was it helpful?

Solution

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

OTHER TIPS

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.

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);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top