繁体   English   中英

用C语言读写文件时遇到麻烦

[英]Trouble reading and writing to files in C

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

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

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

任何帮助表示赞赏!

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

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

我在这里看到几个问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM