int をバイナリ形式で格納するファイルがあります。そして、int データを取り、それをファイル内の特定の位置に挿入する関数を C++ で作成しています。
void AddData(int position, int data);
- position は、データを挿入する必要があるインデックスです。
- data は、挿入される int 値です。
コード
void AddData(int position, int data)
{
fstream os;
char buff[4096];
cnt1 = position;
cnt2+=(data_cnt-cnt1); // data_cnt is global var to cout the no. of data items
os.open("edata.dat", ios::out | ios::in | ios::binary );
os.seekg(0); // start from beg
os.seekg(cnt1*sizeof(int)); // move to position at which data has to be inserted
os.read(reinterpret_cast<char*>(buff), cnt2*sizeof(int)); // read rest of file
os.seekg(cnt1*sizeof(int)); // move back to previous position
cout << os.tellg();
os.write( reinterpret_cast<char*>(&data), sizeof(int) ); //add data
os.write(reinterpret_cast<char*>(buff), cnt2*sizeof(int)); //write back the read data
data_cnt++;
}
関数が初めて呼び出されると、データ項目が 2 回追加されたことを示します。関数が 2 回呼び出されると、tellg() は -1 を示します。
わからない、どうしたの?