请教怎么删除文件中的指定行

请问如何删除文件中的指定行?
假设要打开一个 500MB 的文本文件,通过以下函数要删除文件中的含有指定字串的行:

C/C++ code

delete_line(FILE* pFile, const char* pString)
{
    
}

main()
{
    FILE* pFile = fopen("xxxxxx", "rb+); //or r+?

    delete_line(pFile, "## DEL STR ##"); //如果某行含有字串 "## DEL STR ##",则删除该行.
}



请问该如何实现函数 delete_line?

------解决方案--------------------
C/C++ code
#include<stdio.h>
#include<string.h>
void help(); // 调用使用帮助

#define LINE_SIZE 255

int main(int argc, char* argv[])
{
    if ((1 == argc) || (2 == argc)) {    //错误输入处理
        help();
        return -1;
    }
    FILE* input = fopen(argv[2], "r"); // 数据输入文件
    if (ferror(input)) {
        printf("文件错误:不能打开输入文件: %s \n", argv[2]);
        help();
        return -1;
    }
    FILE* outfile;
    if (3 < argc)  // 如果没有输出文件,输出到屏幕
        outfile = fopen(argv[3], "w"); // 输出结果文件
    else
        outfile = stdout;

    char line[LINE_SIZE]; // 读取一行 字符串
    char* ps;
    char* Value = argv[1];

    printf("正在搜索文件: %s  ...........\a\n", argv[2]);
    while (fgets(line, LINE_SIZE , input)) {  // 读取每一行
        if (ps = strstr(line, Value)) {  // strstr 功能:返回一个指针,它指向字符串中首次出现于Value中的位置,如果没有找到,返回NULL
            ps = line; // ps   恢复到行首
            fputs(ps , outfile);  // 输出结果
        }

    }
    return 0;
}

void help()
{
    printf("本工具可以从文件中按关键字搜索数据行 [C语言版本] BY Hong Wenjun\n\n");
    printf("示例 1 :D:\\>LineExtraction.exe  \"关键字\"  D:\\原始数据.txt  \n");
    printf("示例 2 :D:\\>LineExtraction.exe  \"关键字\"  D:\\原始数据.txt  D:\\数据结果.txt\n");
    printf("\n输出文件不填,结果显示在屏幕上\a\n");
}

------解决方案--------------------
先读取整行,看有没有"## DEL STR ##",有的话就删除。
读取一行可使用fgets()或者判断回车换行符\r\n.
------解决方案--------------------
首先是找到那一行,然后让文件指针指向改行,对改行写入其他信息,或者写入空格覆盖。