// バイナリファイルの入出力
// バッファを介して読み書きを行います
//--------------------------------------------------------------------
// Name
//		stream03.cpp
//
// Description
//		指定サイズ単位にファイルコピーを行います
//

#include <iostream>
#include <fstream>

using namespace std;

int
main( int argc, char *argv[] )
{
	if ( argc != 3 ) {
		cout << "usage: stream03 input_file output_file" << endl;
		return 1;
	}

	ifstream	in( argv[1] , ios::in | ios::binary );	// 入力ストリーム
	if ( !in ) {
		cout << "can't open file " << argv[1] << endl;
		return 1;
	}

	ofstream	out( argv[2], ios::out | ios::binary );// 出力ストリーム
	if ( !out ) {
		cout << "can't open file " << argv[2] << endl;
		return 1;
	}

	const streamsize ssize = 1024;
	char cBuff[ssize];
	do {
		in.read( cBuff, ssize );
		streamsize read_size = in.gcount();
		if ( read_size == 0 ) break;
		out.write( cBuff, read_size );
	} while ( !in.eof() );


	// クローズ
	in.close( );
	out.close( );

	return 0;
}


//
//  バイナリモードを使用する時は、ファイルオープン時に
//  openmode の ios::binary を指定します。
//  gcount() は実際に読み込んだバイト数を返します
//