我编写了以下代码(作为大学ab分配的一部分),试图将1 int保存到文本文件(使用fprintf)和Flight类型的结构数组到.bin文件。似乎两者都是空的。我在程序开头调用read,在退出时调用read或选择Save选项。读取必须首先取int值,因为它是有多少元素的关键计数器(因此需要读取/写入多少元素)。
我已经查看了其他答案,甚至根据他们的一些代码,然而在阅读和重新阅读后我仍然找不到解决方案,因此我发布了一个新问题。
这是Write部分,文件是flyC.txt(用于存储计数器)和fly.bin来存储结构数组。
void writeFlight (){
FILE * cpt;
if ((cpt = fopen("flyC.txt", "wb")) == NULL)
{
printf("ERROR: Flight Count File Could Not Be Opened / Written To \n");
}
fprintf(cpt, "%d", curFly);
FILE * fpt;
if ((fpt = fopen("fly.bin", "wb")) == NULL)
{
printf("ERROR: Flight File Could Not Be Opened / Written To \n");
}
fwrite(flyList, curFly * sizeof(struct Flight), 1, fpt);
fclose(fpt);
}
这是阅读部分。
void readFlight(){
//First Read file with variable curFly
FILE * cpt;
if((cpt = fopen("flyC.txt", "rb")) == NULL)
{
printf("ERROR: Flight Count File Could Not Be Opened\n");
}
if (1 != fscanf(cpt, "%d", &curFly)){
printf("ERROR: Flight Count File Could Not Be Read\n");
}
fclose(cpt);
FILE * fpt;
if((fpt = fopen("fly.bin", "rb")) == NULL)
{
printf("ERROR: Flight File Could Not Be Opened / Read\n");
}
fread(flyList, sizeof(struct Flight) * curFly, 1, fpt);
fclose(fpt);
}
感谢任何帮助!
答案 0 :(得分:2)
你在写函数中忘了fclose(cpt);
。
此外,您应该返回错误,而不是调用fread / fwrite。
答案 1 :(得分:2)
我在这里看到了几个问题。
"wb"
进行撰写时不应使用cpt
,而只是"w"
cpt
时,您不会关闭它。操作系统可能会在程序结束时为您关闭它,但您不应该依赖它。“rb"
打开它,而只是"r"
。