无法在C中读取和写入文件

时间:2014-01-05 16:26:59

标签: c file file-io struct int

我编写了以下代码(作为大学ab分配的一部分),试图将1 int保存到文本文件(使用fprintf)和Flight类型的结构数组到.bin文件。似乎两者都是空的。我在程序开头调用read,在退出时调用read或选择Save选项。读取必须首先取int值,因为它是有多少元素的关键计数器(因此需要读取/写入多少元素)。

我已经查看了其他答案,甚至根据他们的一些代码,然而在阅读和重新阅读后我仍然找不到解决方案,因此我发布了一个新问题。

这是Write部分,文件是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);
}

感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

你在写函数中忘了fclose(cpt);

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

答案 1 :(得分:2)

我在这里看到了几个问题。

  1. 我知道flyC.txt应该包含纯ASCII文本而不是二进制数据。如果是这种情况,则在打开"wb"进行撰写时不应使用cpt,而只是"w"
  2. 在撰写cpt时,您不会关闭它。操作系统可能会在程序结束时为您关闭它,但您不应该依赖它。
  3. 在回读文件时,你为flyC.txt做了类似的错误;如果它包含二进制数据,则不应使用“rb"打开它,而只是"r"