【问题标题】:Trouble reading and writing to files in C在 C 中读取和写入文件时遇到问题
【发布时间】:2014-01-05 16:26:59
【问题描述】:

我编写了以下代码(作为大学 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);
}

感谢任何帮助!

【问题讨论】:

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

标签: c file file-io struct int


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢!它现在就像一个魅力,我添加了 fclose 并使它在发生错误时不会打开文件......非常有用且快速
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多