Binární výstupní soubory
Streamy byly původně navrženy pro text, takže výchozí výstupní režim je text. V textovém režimu se znak odřádkování (nový řádek) rozšíří na dvojici návratového kanálu řádku na začátek řádku. Rozšíření může způsobit problémy, jak je znázorněno tady:
// binary_output_files.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
int iarray[2] = { 99, 10 };
int main( )
{
ofstream os( "test.dat" );
os.write( (char *) iarray, sizeof( iarray ) );
}
Můžete očekávat, že tento program vypíše posloupnost bajtů { 99, 0, 10, 0 }; místo toho vypíše { 99, 0, 13, 10, 0 }, což způsobuje problémy pro program, který očekává binární vstup. Pokud potřebujete skutečný binární výstup, ve kterém se znaky zapisují nepřeložit, můžete binární výstup zadat pomocí argumentu konstruktoru openmode
ofstream:
// binary_output_files2.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
int iarray[2] = { 99, 10 };
int main()
{
ofstream ofs ( "test.dat", ios_base::binary );
// Exactly 8 bytes written
ofs.write( (char*)&iarray[0], sizeof(int)*2 );
}