C++ > 入出力システム

iosで定義されているfmtflags 列挙型のフラグ

  • skipws skip white space オンにするとストリーム入力時に先行ホワイトスペースを破棄
  • unitbuf 挿入操作のたびにバッファをクリア
  • boolalpha ブール値の入出力にtrueキーワードとfalseキーワードが使用できる

出力の位置

デフォルトは右寄せ

  • adjustfield
    • left 出力が左寄せ
  • right 出力が右寄せ
  • internal フィールドがいっぱいになるまで数値を追加

進数

  • showbase 数値の基数
  • basefield
    • dec 10進数表記
  • hex 16進数表記
  • oct 8進数表記

浮動小数点表記

デフォルトで 科学技術表記でのeは小文字、 16進数表示のxは小文字

  • uppercase 科学技術表記のeと、16進数表示のxを大文字に
  • showpos 正値の前に正符号が表示される
  • showpoint すべての浮動小数出力に小数点と後続ゼロが(必要・不必要にかかわらず)表示される
  • floatfield デフォルト(scientific,fixedのフラグが両者オフ)でコンパイラによる判断で表記
    • scientific 浮動小数点値が科学技術表記で表示される
  • fixed 浮動小数点数値が通常表記で表記される

ランダムアクセス

istream &seekg( off_type offset, seekdir origin );
ostream &seekp( off_type offset, seekdir origin );

seekdirが取る値

意味
ios::beg 先頭からシーク
ios::cur 現在位置からシーク
ios::end 終わりからシーク

C++ではファイルの入出力の指定にputポインタ・getポインタを使用する。 これらは入出力操作が行われると自動的に当該ポインタが順次前進する。

  • seekg()関数 対応ファイルの現getポインタを、指定されたoriginからoffsetバイト数 だけ移動させる。
  • seekp()関数 対応ファイルの現putポインタを、指定されたoriginからoffsetバイト数だけ移動させる。

※改行の関係でbinaryで開くほうがよい

ファイルのサイズとデータの読み込み

void readFile( char** buffer, int* size, const char* filename ){
	ifstream in( filename, ifstream::binary );
	if ( !in ){
		*buffer = 0;
		*size = 0;
	}else{
		in.seekg( 0, ifstream::end );
		*size = static_cast< int >( in.tellg() );
		in.seekg( 0, ifstream::beg );
		*buffer = new char[ *size ];
		in.read( *buffer, *size );
	}
}
  1. ファイルポインタを末尾からシーク
  2. tellg():ファイルポインタの現在位置を返す ∴サイズになる
  3. ファイルポインタの先頭からシークして、ファイルポインタを最初に戻す。
  4. バッファをサイズだけ作成
  5. 読み取り


最終更新:2011年03月08日 17:26