C语言:如何根据需要删除文件中特定的行

2024-12-22 16:20:14
推荐回答(2个)
回答1:

C语言文件操作有覆盖和追加两种模式,但不提供插入模式。所以要在文件中指定行进行删除或者插入,需要按照如下流程操作: 1、以只读打开文件; 2、将文件逐行读入到内存中; 3、关闭文件; 4、在内存中对指定行插入或者删除; 5、以只写打开文件; 6、将修改后的数据写入文件; 7、关闭文件。参考代码:假定文件最多100行,执行删除第5行,并在原第8,9行中间插入一行数据为例,代码如下: #include #include char buf[100][1000];int main(){ FILE *fp; char *s="abcdef\n";//要插入的数据 int i=0; int n=0; fp = fopen("my.txt", "r");//读方式打开文件 while(fgets(buf[n], 1000, fp) != EOF)//循环读取所有数据 n++; fclose(fp);//关闭文件。 for(i = 4; i<7; i ++)//删除第五行 strcpy(buf[i],buf[i+1]); strcpy(buf[7], s);//插入到第8行。 fp=fopen("my.txt", "w");//写方式打开文件。 for(i = 0; i < n; i ++)//写入所有处理后的数据。 fputs(buf[i], 1000, fp); fclose(fp);//关闭文件。 return 0; }

回答2:

#include
#include
int main()
{
    FILE* fp = fopen("歌单.txt", "r");
    char title[200], author[200], album[200];
    char song_to_del[200];
    if(!fp)
    {
        printf("歌单打开失败!");
        return -1;
    }
    printf("输入你不想看到的歌名:");
    scanf("%s", song_to_del);
    FILE* fp2 = fopen("裁剪后的歌单.txt", "w");
    while(fscanf(fp, "%s%s%s", title, author, album) == 3)
    {
        if(strcmp(title, song_to_del))
            fprintf(fp2, "%s\t%s\t%s\n", title, author, album);
    }
    fclose(fp);
    fclose(fp2);
    return 0;
}