ファイル処理
2014年1月18日:C++
C++におけるファイル処理について解説します。Cと比べてC++のファイル処理はオブジェクトになっています。そのため、ファイル処理の部品を一つにまとめることができ、プログラムにまとまりがでてきます。ここでは、具体的にはテキストファイルの入出力とバイナリファイルの入出力を解説します。
テキストファイルの読み書き
では、テキストファイルをつくって読み取るプログラムをつくります。
#include <iostream> #include <fstream> using namespace std; int main(){ //test.txtファイルをつくる ofstream fout("test.txt"); if(!fout){ cout<<"エラー"; return 1; } fout << "test\n"; //testを保存する fout.put('a'); //1文字を保存 fout.put('\n'); fout.close(); //test.txtファイルを開く ifstream fin("test.txt"); if(!fin){ cout<<"エラー"; return 1; } char str; char strs[100]; //1行表示 fin>>strs; cout<<strs; //1文字ずつ読む while(fin.get(str)){ //読み取れなくなったらfalseをかえす cout<<str; } fin.close(); return 1; }
C++のファイル処理を使用するには
#include <fstream>
でインクルードする必要があります。はじめに、ファイルをつくるために
ofstream fout(“test.txt”);
でストリームをつなげています。ここで、ストリームをつなげるのに失敗するとfoutが偽になりエラーを判断できます。次に、
fout<<“test\n”;
でfoutに文字を保存しています。また、put(‘a’)を使って一文字ずつの保存も可能です。読み込みも同様に
ifstream fin(“test.txt”);
でストリームをつなげます。そして、
fin>>strs;
でstrsに文字列を一行読み取ります。ここではstrsにtest\nが入ったことになります。そして、get(str);により一文字ずつ読み取っていきます。この命令は読み取れなくなるとtrueを返します。
バイナリファイルの読み書き
バイナリファイルの読み書きも同じように行うことができます。
#include <iostream> #include <fstream> using namespace std; int main(){ //testファイルをつくる ofstream fout("test",ios::binary); if(!fout){ cout<<"エラー"; return 1; } int a=100; fout.write((char *)&a,sizeof(int)); fout.close(); //testファイルを開く ifstream fin("test",ios::binary); if(!fin){ cout<<"エラー"; return 1; } int b; fin.read((char *)&b,sizeof(int)); cout<<b; fin.close(); return 1; }
バイナリ形式で保存する場合は、
ofstream fout(“test”,ios::binary);
のようにios::binaryと指定します。この指定で使える演算子としては
- ios::app ファイルへの出力がファイルの末尾に付加する
- ios::ate ファイルを開くときにファイル末尾までシークする
- ios::in ファイルが入力可能
- ios::out ファイルが出力可能
- ios::trunc 同名のファイルが存在するなら破棄する
があります。これらの値はOR「|」により組み合わせが可能です。書き込む際には
write((char *)&a,sizeof(int));
で行います。ポインタはchar型に変換し、変数のサイズを指定します。ここでは変数のサイズはint型のサイズです。
読み込みも同じようにifstreamにios::binaryを付けて呼び、
read((char *)&b,sizeof(int));
で読み込みます。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー