C 如何查找和替换打开文件中的数据/行

C 如何查找和替换打开文件中的数据/行,c,file,C,File,嗨,伙计们,我对档案不熟悉。我必须找到一个特定的数据(KJadid.Tedad)并替换其中的其他整数。以下是我使用的代码: fseek(fileKALAJADIDptr, 0, SEEK_SET); int mojoodi, shomare; scanf("%d", &shomare); scanf("%d", &mojoodi); int i = 0; while (fread(&KJadid, sizeof(str

嗨,伙计们,我对档案不熟悉。我必须找到一个特定的数据(KJadid.Tedad)并替换其中的其他整数。以下是我使用的代码:

    fseek(fileKALAJADIDptr, 0, SEEK_SET);

    int mojoodi, shomare;
    scanf("%d", &shomare);
    scanf("%d", &mojoodi); 

    int i = 0;
    while (fread(&KJadid, sizeof(struct KalaJadid), 1, fileKALAJADIDptr))
    {
        if (i == shomare - 1)
        {
            KJadid.Tedad = mojoodi;
            fseek(fileKALAJADIDptr, (shomare - 1) * sizeof(struct KalaJadid), SEEK_SET);
            fwrite(&KJadid, sizeof(struct KalaJadid), 1, fileKALAJADIDptr);
            break;
        }
        i++;
    }
    fclose(fileKALAJADIDptr);
使用fseek,我转到文件的开头,然后获取shomare&mojoodi(“shomare”是我要更改其数据的结构,“mojoodi”是新数据),然后我读取文件,直到达到我想要的结构,然后使用fseek替换原来的数据,并使用fwrite将数据写入文件,但当我打印数据时(我将此代码用于:)

它打印以前拥有的所有数据,最后打印新数据(它不替换任何内容,只是将数据添加到文件末尾)

你们问我是怎么打开文件的:

FILE* fileKALAJADIDptr = fopen(fileKALAJADID, "a+b");
if (fileKALAJADIDptr == NULL)
{
    fopen(fileKALAJADID, "w+");
}

如果只是替换数据,而不是在最后写入整个内容,我应该怎么做?请帮助

您以错误的模式打开文件:

使用“a”或“a+”访问类型打开文件时,所有写入操作都发生在文件的末尾。文件指针可以使用fseek或rewind重新定位,但在执行任何写入操作之前,始终会移回文件的末尾。因此,无法覆盖现有数据。


以“r+”模式打开文件-打开文件进行读写操作。(文件必须存在。)

这是否回答了您的问题?检查此项。向我们展示如何打开文件。@Lucas它没有回答我的问题,但谢谢you@PaulOgilvie我添加了开始文件部分
FILE* fileKALAJADIDptr = fopen(fileKALAJADID, "a+b");
if (fileKALAJADIDptr == NULL)
{
    fopen(fileKALAJADID, "w+");
}