Хм. Ну на VC++ я писал когда-то чтение из байтового потока данных (не из файла).
Новые строки отслеживал по символам 0x10 и 0x13 (в си это "\r\n") - это символы CR, LF (возврат курсора на начало строки и создание новой строки). Эти символы могут встретиться оба, а могут по отдельности. Я записывал данные сам и всегда сам ставил их два.
Вот мой кривой код времён 2003 года:
Код:
//Читает строку из потока IStream - до символов \r\n
HRESULT ReadLineFromStream(IStream *pStm, CString *pLine)
{
//algorithm: read by char to combination "\r\n" or to eof
ASSERT(pStm!=NULL); //Check pointer
DWORD pw=1; //initial value
CString tmpS,tmpBuf;
LPSTR buf;
HRESULT hr=S_OK; //initial value
buf=new char[1]; //allocate bufer
//read symbols from stream
while ((hr==S_OK) && (pw))
{
hr=pStm->Read(buf,1,&pw); //get n-char line
tmpBuf=buf;
tmpBuf=tmpBuf.Left(pw); //get a physical n-char string
tmpS+=tmpBuf;
//check new line symbols
if(strcmp(tmpS.Right(2),_T("\r\n"))==0)
{
tmpS=tmpS.Left(tmpS.GetLength()-2);
hr=S_FALSE; //read complete
}
}
*pLine=tmpS; //return result
delete buf; //delete buffer
return true;
}