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

时间:2013-03-01 03:06:51

标签: 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);

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

建议采用什么样的流程来完成这项任务?

1 个答案:

答案 0 :(得分:6)

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

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

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

有关相同的一般问题的最新讨论,请参阅fseek() goes back to the end of file when writing a value