无法读取和写入文件C
问题描述:
我已经写了下面的代码(作为大学的ab分配的一部分),试图将1 int保存到文本文件(使用fprintf)和一个类型为Flight的结构数组一个.bin文件。看起来这两个都是空的。我在程序开始时调用读取,并在退出时或在选择“保存”选项时进行写入。读取必须首先获取int值,因为它是有多少元素(因此需要读取/写入多少元素)的关键计数器。无法读取和写入文件C
我看了其他答案,甚至基于我的一些代码,但是在阅读和重新阅读后,我仍然找不到解决方案,因此我发布了一个新问题。
这是写入部分,文件是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);
}
任何帮助表示赞赏!
答
我在这里看到几个问题。
- 我明白flyC.txt应该包含纯ASCII文本而不是二进制数据。如果是这种情况,则不应使用
"wb"
开放cpt
进行写入,而只需要"w"
- 写入
cpt
时,请不要关闭它。程序结束时,操作系统可能会关闭它,但不应该依赖于此。 - 在读取文件时,您已经为flyC.txt做过类似的错误;如果它包含二进制数据,则不应使用
“rb"
打开它,而应仅使用"r"
。
答
您在写入功能中忘记了fclose(cpt);
。
此外,你应该返回错误,而不是调用fread/fwrite。
+0
谢谢!它现在像一个魅力工作,我添加了fclose,并使其不会打开文件如果发生错误...非常有用和快速 –
如果您自己查看文件(即在记事本或类似文件中),他们是否有任何内容? (换句话说:是阅读还是书写问题?) – tabstop