user3545752 user3545752 - 28 days ago 10
C++ Question

Checking line breaks (newline characters) with CFile

I need to check whether a file is ended with a line break or not, using

CFile
.
What I have tried:


  1. point the file pointer at the end of the file

  2. move the pointer back by 2 units

  3. check if the pointer is pointing at
    \r\n



Here is my code:

cfile.SeekToEnd();
cfile.Seek(-2, CFile::current);
char buffer[2];
cfile.Read(buffer, 2);
if(buffer[0] == '\r' && buffer[1] == '\n') printf("Ended with line break!");
else printf("Not ended with line break!");


However, what I found is that the buffer gives me a
\n
character and a garbage character (with weird values like 204). After some research through the documentation, I found that
CFile::Read
only count
\r\n
as a single character:


For text-mode files, carriage return–linefeed pairs are counted as single characters.


I am so confused because the file pointer obviously still counts 2 characters but I cannot get both of them. Is there any method to check line break at the end of a file with CFile?

Answer

I solved the problem by using CFile::typeBinary when opening a file.

It seems that CFile::typeText do something special processing carriage return–linefeed pairs (e.g. filling in a garbage character which is supposed to be a carriage return) which is not desired in my case.

Comments