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
and text
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 the end of line sequence
.
In text
mode end of line sequence
is translated on read into \n
.
The end of line sequence
is platform dependant.
Examples:
LF ('\0x0A'): Multics, Mac OS X, BeOS, Amiga, RISC OS
CRLF ('\0x0D\0x0A'): Microsoft Windows, DEC TOPS-10, RT-11
CR: ('\0x0D'): TRS-80, Mac OS Pre X
RS: ('\0x1E'): QNX pre-POSIX implementation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With