In my experiments with the following code snippet, I did not find any particular difference whether i created the streams with/without the ios:binary mode:
int main()
{
ifstream ostr("Main.cpp", ios::in | ios::binary | ios::ate);
if (ostr.is_open())
{
int size = ostr.tellg();
char * memBlock = new char[size + 1];
ostr.seekg(0, ios::beg);
ostr.read(memBlock, size);
memBlock[size] = '\0';
ofstream file("trip.cpp", ios::out | ios::binary);
file.write(memBlock, size);
ostr.close();
}
}
Here I am trying to copy the original source file into another file with a different name.
My question is what is the difference between the read/write calls(which are associated with binary file IO) when an fstream object is opened with/without ios::binary mode ? Is there any advantage of using the binary mode ? when to and when not to use it when doing file IO ?
The only difference between
binary
andtext
mode is how the '\n' character is treated.In
binary
mode there is no translation.In
text
mode\n
is translated on write into a theend of line sequence
.In
text
modeend of line sequence
is translated on read into\n
.The
end of line sequence
is platform dependant.Examples:
ASCII based systems:
When you want to write files in binary, with no modifications taking place to your data, specify the
ios::binary
flag. When you want to write files in text mode, don't specifyios::binary
, and you may get things like line ending translation. If you're on a UNIX-like platform, binary and text formats are the same, so you won't see any difference.