无法读取和写入文件C

问题描述:

我已经写了下面的代码(作为大学的ab分配的一部分),试图将1 int保存到文本文件(使用fprintf)和一个类型为Flight的结构数组一个.bin文件。看起来这两个都是空的。我在程序开始时调用读取,并在退出时或在选择“保存”选项时进行写入。读取必须首先获取int值,因为它是有多少元素(因此需要读取/写入多少元素)的关键计数器。无法读取和写入文件C

我看了其他答案,甚至基于我的一些代码,但是在阅读和重新阅读后,我仍然找不到解决方案,因此我发布了一个新问题。

这是写入部分,文件是f​​lyC.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

如果您自己查看文件(即在记事本或类似文件中),他们是否有任何内容? (换句话说:是阅读还是书写问题?) – tabstop

我在这里看到几个问题。

  1. 我明白flyC.txt应该包含纯ASCII文本而不是二进制数据。如果是这种情况,则不应使用"wb"开放cpt进行写入,而只需要"w"
  2. 写入cpt时,请不要关闭它。程序结束时,操作系统可能会关闭它,但不应该依赖于此。
  3. 在读取文件时,您已经为flyC.txt做过类似的错误;如果它包含二进制数据,则不应使用“rb"打开它,而应仅使用"r"

您在写入功能中忘记了fclose(cpt);

此外,你应该返回错误,而不是调用fread/fwrite。

+0

谢谢!它现在像一个魅力工作,我添加了fclose,并使其不会打开文件如果发生错误...非常有用和快速 –