0
struct student
{
int identity;
char name[MAX];
int no_assessment;
char assessmenttask[MAX];
int mark;
};


void appendbfile(char filename [MAX])
{
ofstream writeb;
char filenameb [MAX];
strcpy(filenameb,filename);
student s;

strcat(filenameb,".dat");

cout<<"--------------------------------"
    <<endl
    <<"Begin appending for binary file " 
    <<filenameb
    <<endl
    <<endl;


cout<<"Enter student id: ";
cin>>s.identity;

cout<<"Enter student name: ";
cin>>s.name;

writeb.open(strcpy(filenameb,".dat"),ios::binary);

writeb.seekp(0,ios::end);

writeb.write (reinterpret_cast <const char *>(&s), sizeof (s));

writeb.close();

}

プログラムを実行できますが、バイナリ ファイルにレコードを追加できないようです。誰かが私を見て助けてくれますか。

ありがとう

4

3 に答える 3

1

ios::appフラグをopen関数に渡す必要があります。

 writeb.open(filenameb, ios::binary | ios::app);
于 2013-01-12T11:39:01.517 に答える
1

問題は下の行にあります、あなたは変更する必要があります

writeb.open(strcpy(filenameb,".dat"),ios::binary);

writeb.open(filenameb, ios::binary);

すでに実行してstrcat(filenameb,".dat");おり、strcpy内writeb.openでファイル名を「.dat」に置き換えたfilenamebに「.dat」をコピーしているためです。注意深く見ると、ファイル'.dat'は、データが含まれているプログラムと同じディレクトリに作成されます。

seekp(0,ios::end);また、ファイルポインタをファイルの最後に移動するために呼び出す必要がないため、基本的にios::appフラグ付きのファイルを開くと、ファイルがファイルの最後に追加されます。

writeb.open(filenameb, ios::binary | ios::app);
writeb.write (reinterpret_cast <const char *>(&s), sizeof (s));
writeb.close();

ファイルオープンモードを参照してください:http://en.cppreference.com/w/cpp/io/ios_base/openmode

于 2013-01-12T11:39:05.580 に答える
0

また、open関数でios ::appORedが必要です。

于 2013-01-12T11:40:11.343 に答える