gpt4 book ai didi

c++ - 无法将记录 append 到二进制文件

转载 作者:行者123 更新时间:2023-11-28 03:25:09 25 4
gpt4 key购买 nike

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();

}

我可以运行该程序,但我似乎无法将记录 append 到二进制文件。谁能帮我看看。

谢谢

最佳答案

问题在下一行,你需要改变

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

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

因为您已经完成了 strcat(filenameb,".dat"); 并且 strcpy insidewriteb.open 将 '.dat' 复制到替换了文件名的 filenameb用'.dat'。如果仔细观察,文件“.dat”创建在与包含数据的程序相同的目录中。

此外,您不必调用 seekp(0,ios::end); 将文件指针移动到文件末尾,本质上是使用 ios::打开文件app 标志会将文件 append 到文件末尾。

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

关于c++ - 无法将记录 append 到二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14292887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com