C - 如何搜索文件并覆盖其中的一部分

kub*_*j21 2 c fopen

我正在研究一个程序,该程序在文件中写入一个特定的字符串,该字符串在写入文件时在结构中.如果我在该文件中找到匹配项,我需要覆盖该结构的一部分.在文件中搜索匹配非常简单,但我正在努力覆盖该结构.下面是我的代码搜索文件并尝试覆盖该数据.

dfp = fopen(archName, "ab");
    if(dfp == NULL) {
        printf("An error has occurred... %s could not be opened.\n", archName);
        return 0;
    } /* End if */

    /* Read first header file */
    fread(&getHeader, sizeof(getHeader), 1, dfp);

/* Check for match */
    if(strcmp(fName[0], getHeader.file_name) == 0) {
        getHeader.deleted = (char)49;
        fwrite(&getHeader, sizeof(getHeader), 1, dfp);
Run Code Online (Sandbox Code Playgroud)

请注意,getHeader是一个结构.有多个结构可以存储在我的文件中的任何位置.我需要搜索每个标头的特定字符串(简单).找到匹配项后,必须覆盖该结构.

什么样的过程会被推荐用于完成这样的任务?

Jon*_*ler 6

您可以编写一个循环来将记录一次一个地读取到记录结构中.每次读取后,您可以将刚刚读取的记录与所需记录进行比较,如果不是您需要的记录,则读取下一条记录.

你刚刚找到了你想要的唱片,但你也只是阅读了记录; 你必须寻求覆盖记录.您还必须每次都在读取和写入之间寻找,反之亦然,因为C标准表示如果不这样做,行为是不确定的.这意味着在写入之前进行搜索,在返回下一条记录之前进行另一次搜索.

由于您已在"ab"模式下打开文件,因此任何搜索都是无关紧要的,因为所有写入都将在末尾附加.你可能想要"r+b"作为模式fopen().

在最近讨论相同的一般问题fseek()时,请查看返回到文件末尾的值.