C++ファイルデータ読み書き操作

3913 ワード

最近勉強中にファイル操作を使いましたが、ここでメモします.
ファイルデータを配列に読み込みます.
#include
#include 
#include 
#include 
#include   //      

using namespace std;
ifstream infile;   //   

int main()
{
	int datalen=0;
    double d[100];
	int i=0;
    infile.open("GPS_data.txt", ios::in); 
    while(!infile.eof()&& infile.good()) infile>>d[datalen++];
    for(int i=0;i

ファイルにデータを書き込みます.
#include
#include 
#include 
#include 
#include   //      

using namespace std;
ofstream outfile;   //   

int main()
{
    outfile.open("GPS_data.txt", ios::app);
    /*           ,         ,
     out         ; trunc      */
    if(!outfile.is_open ())
        cout << "Open file failure" << endl;
    else{
        outfile << "213" << "\t" << "213" << "\t" << endl;
        cout << "Write file success" << endl;
    }
    outfile.close();
	return 0;
}

ファイルの操作は非常に重要ですが、C++でファイルをどのように操作しているかを紹介します.C++
次のクラスでファイルの入出力をサポートします.
ofstream:    (  )     ( ostream    )

ifstream:    (  )    ( istream    )

fstream:             ( iostream    )

ファイルを開く
これらのクラスのオブジェクトの最初の操作は、通常、本物のファイルに関連付けることです.つまり、ファイルを開くことです.開かれたファイルは、プログラム内でストリームオブジェクト(stream object)によって表されますが、このストリームオブジェクトに対する入出力操作は、実際にはファイルに対する操作です.
ストリームオブジェクトでファイルを開くには、そのメンバー関数を使用します.
open():void open (const char * filename, openmode mode);

ここでfilenameは、開くファイル名を表す文字列で、modeは次のフラグの組み合わせです.ios::inは入力(読み取り)のためにファイルを開きます.
ios::out    ( )     

ios::ate     :   

ios::app            

ios::trunc               

ios::binary      

これらの識別子は、「または」オペレータ(|)間隔で組み合わせて使用することができる.たとえば、ファイルをバイナリで開く場合はbin」は、メンバー関数open()を呼び出すことで、いくつかのデータを書き込むことができます.
ofstream file;
file.open ("example.bin", ios::out | ios::app | ios::binary);

ofstream、ifstream、fstreamのすべてのクラスのメンバー関数openには、デフォルトでファイルを開く方法が含まれています.この3つのクラスのデフォルトは異なります.クラスパラメータのデフォルトです.
ofstream ios::out | ios::trunc

ifstream ios::in

fstream ios::in | ios::out

デフォルト値は、関数が呼び出されたときに宣言パラメータがない場合にのみ使用されます.関数が呼び出されたときにパラメータが宣言された場合、デフォルト値は呼び出しパラメータと組み合わせることなく完全に書き換えられます.
クラスofstream、ifstream、fstreamのオブジェクトの最初の操作は通常ファイルを開くため、これらのクラスにはopen関数を直接呼び出し、同じパラメータを持つコンストラクション関数があります.これにより、上記と同じようにオブジェクトを定義し、ファイルを開く操作を行うことができます.
ofstream file ("example.bin", ios::out | ios::app | ios::binary);

両方のファイルを開く方法は正しいです.
メンバー関数is_open()を呼び出すことで、ファイルが正常に開いているかどうかを確認できます.
bool is_open();

真(true)はファイルが正常に開かれたことを表し、偽(false)は逆です.
ファイルを閉じる
ファイルの読み書き操作が完了したら、ファイルを閉じてアクセス可能にしなければなりません.ファイルを閉じるには、キャッシュ内のデータを排出してファイルを閉じるメンバー関数close()を呼び出す必要があります.フォーマットは簡単です.
void close ();

この関数が呼び出されると、元のストリームオブジェクト(stream object)が他のファイルを開くために使用され、このファイルは他のプロセス(process)にすべてアクセスされ直すことができます.
ストリームオブジェクトが破棄されたときに開いているファイルに連絡しないように、構造関数(destructor)は閉じた関数closeを自動的に呼び出します.
ステータスフラグの検証(Verification of state flags)
eof()のほかに、ストリームのステータスを検証するメンバー関数(bool型の戻り値をすべて返す)もあります.
bad()

読み書き中にエラーが発生した場合はtrueを返します.たとえば、書き込み状態ではないファイルに書き込みを行う場合や、書き込みするデバイスに空き容量がない場合などです.
fail()

bad()と同じ場合にtrueが返されるほか、フォーマットエラーを加えた場合にもtrueが返されます.例えば、整数を読み込もうとしてアルファベットが得られた場合などです.
eof()

読み取りファイルがファイルの最後に到達したらtrueを返します.
good()

これは最も一般的です.以上のいずれかの関数を呼び出してtrueを返すと、この関数はfalseを返します.
上記のメンバー関数でチェックされたステータスフラグをリセットするには、パラメータなしでメンバー関数clear()を使用します.