【问题标题】:Append and delete array of structure data into file using c使用c将结构数据数组追加和删除到文件中
【发布时间】:2021-08-09 10:25:02
【问题描述】:

我正在尝试使用结构数组执行一些操作,例如添加、删除、追加数据到 C 语言的文件中。 这是我的结构。

struct S_info
{
    char title[50];
    char sName[50];
    int rMm;
    int rDd;
    int rYy;
    int rating;
    bool deleteSong;
};

而且我能够使用结构将数据添加到文件中。这是添加数据的代码。

for (int i = 0; i < n; i++)
{
    printf("Title: ");
    scanf("%s", &title);
    printf("\nName of the Song: ");
     .....................

    strcpy(s[i].title, title);
    strcpy(s[i].sName, sName);

    s[i].rMm = rMm;
    ...........

    fwrite(&s[i], sizeof(struct S_info), 1, outfile);
}

但问题是,每当我添加新数据时,以前的数据都会从文件中删除。因此,我需要创建一个函数,该函数将使用结构数组将新数据附加到文件中。我还想创建另一个将删除的函数。

为了删除数据我尝试了一种方法,我在结构中创建了一个布尔变量来帮助我删除数据。但我不喜欢代码。 我在互联网上搜索使用结构附加数据,但我没有找到任何好的解决方案,删除数据也发生了同样的事情。 我需要的是使用结构数组将新数据追加和删除到文件中。

【问题讨论】:

  • 当使用%s 格式扫描字符串时,您应该不需要参数的地址运算符&amp;。实际上,取决于例如的类型。 title,使用&amp;title 可能会导致崩溃。
  • 至于你的问题,outfile文件怎么打开?您是否以纯写入模式打开它,该模式会截断(擦除)文件中的现有数据?还是在追加模式下将新数据追加到文件中?还是处于读写模式?
  • @Someprogrammerdude 这是我打开文件的方式:outfile = fopen ("songs.dat", "w");这就是我尝试添加数据的方式: fwrite (&s[i], sizeof(struct S_info), 1, outfile);
  • @POKA 以追加模式打开文件:fopen("songs.dat", "a");
  • 请阅读一些关于fopen 及其开放模式字符串的信息。使用"w",您可以删除文件的所有现有内容(这也是任何体面的初学者书籍、课程或教程都应该提到的内容)。

标签: arrays c file file-io structure


【解决方案1】:

您可以在打开输出文件时查看,使用“打开”功能可以使用很多有用的选项,(您可以在“打开”手册中找到它); O_APPEND 是这些选项之一,它允许您在文件中已经存在的数据之后写入文件,所以我认为这就是您想要的

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2015-10-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多