[英]Trouble reading and writing to files in C
我编写了以下代码(作为大学的AB作业的一部分),试图将1个int保存到文本文件(使用fprintf),并将类型为Flight的结构数组保存到.bin文件。 似乎两者都空着。 我在程序开始时调用读取操作,在退出时或选择“保存”选项时调用写入操作。 读取必须首先使用int值,因为它是存在多少元素(因此需要读取/写入多少个元素)的关键计数器。
我看了其他答案,甚至根据它们得出了一些代码,但是在阅读和重新阅读后,我仍然找不到解决方案,因此我发布了一个新问题。
这是写部分,文件是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);
}
任何帮助表示赞赏!
您忘记了fclose(cpt);
在写功能。
另外,您应该返回错误,而不要调用fread / fwrite。
我在这里看到几个问题。
cpt
进行写入时,您不应使用"wb"
,而应仅使用"w"
cpt
时不会关闭它。 在程序结束时,操作系统可能会为您关闭它,但是您不应该依赖于此。 “rb"
打开它,而如果它包含二进制数据,则只能使用"r"
打开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.