2016-08-31 71 views
-1

我想删除文本文件,行删除特定行的文本文件后,我寻找的是:如何用C编程语言

如:

char *id; //id to search 
char buf[1024]; 

FILE *fp=fopen("abc.txt","r"); 

while (fgets(buf,sizeof(buf),fp)!=NULL) 
{ 
    if(strstr(buf,id)!=NULL) 

     {printf("%s\n",buf); } 

} 
+1

为什么要删除_that_文件本身?为什么不能用你需要的线创建一个新文件? –

+0

[This](http://stackoverflow.com/a/15759017/3970360)可能对您的情况有用。 –

+0

你的代码看起来几乎没问题。它出什么问题了?它不是做你想做的事吗? –

回答

1

根据文件有大小基本上有两种解决方案:

  1. 对于一个中等小的文件,你可以将整个文件读入内存。重新创建文件并将其写出,除了要删除的行外。

  2. 从原始文件逐行读取。除了要删除的行外,将所有行写入新的临时文件。将临时文件重命名为原始文件。这里文件大小无关紧要(速度除外)。

方法1有一个很大的缺点:如果有错误(在你的代码的bug,系统出现故障或其它问题)中的内容可能不是所有的写,你可能会丢失数据。尽管方法1通常更快,并且它允许您以简单的方式对数据进行多种转换。