2

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

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 是一个结构。有多个结构可以存储在我的文件中的任何位置。我需要在每个标题中搜索特定的字符串(简单)。找到匹配项时,必须覆盖该结构。

为了完成这样的任务,会推荐什么样的流程?

4

1 回答 1

6

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

您刚刚找到了您想要的记录,但您也只是阅读了记录之外的内容;您必须返回以覆盖记录。您还必须每次都在读取和写入之间寻找,反之亦然,因为 C 标准说如果您不这样做,行为是未定义的。这意味着在写入之前进行一次查找,然后在返回下一条记录之前进行一次查找。

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

为最近对相同一般问题的讨论编写值时,请参阅fseek()文件末尾。

于 2013-03-01T03:11:39.163 回答