求助C语言 删除文本文件内的指定字符串

有一个txt格式的文件,用以保存一些文件名如:1.txt2.txt3.txt每个文件名之间用回车换行符分隔现在需要删除这个文件中的指定文件名,比如删除1.txt文件内容就... 有一个txt格式的文件,用以保存一些文件名 如: 1.txt 2.txt 3.txt
每个文件名之间用回车换行符分隔
现在需要删除这个文件中的指定文件名,比如删除1.txt 文件内容就变为只剩下2.txt 3.txt(每个文件名之间用回车换行符分隔)

个人思路是,因为是用换行符作为分隔,所以逐行读取字符串,然后与要删除的文件名字符串作比较,若相同,则删除,但是写了很久总是出错,求各位大神帮助

求详细代码。。。万分感谢
注意,每个文件名使用回车分隔的,不是空格,我是小白所以fgets用起来好蛋疼,请各位大神指导下。。。
展开
 我来答
tattackor
推荐于2016-10-04 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:887万
展开全部

1.打开一个tmp.txt的文件保存结果文件
FILE* out=fopen("tmp.txt","w");
FILE* in=fopen("原文件.txt","r");

循环采用fgets从in中读入字符串,fgets可以指定读入的最大字符串长度,因此可以一部分一部分地读,处理到文件结束为止
然后,因为你是要对完整的单词进行处理,所以fgets完之后再继续fgetc一个一个的字母,直到读到一个','再结束,这样就可以在内存中读到一部分的完整单词

2.关键代码:

char str[1000]; //开个1000长度的字符串数组
int len;
while (fgets(str,900,in)!=null) //读900个,留点空间后面可以读入直完整单词
{
len=strlen(str);
if (str[len-1]=='\n') 
{
str[len-1]='\0'; //fgets还有个特点,碰到回车会结束,所以如果碰到回车,就会把结尾的回车也读进去,要去掉
len--;
}
while (str[len-1]!=',') //把最后的单词读完整
{
str[len]=fgetc(in);
if (str[len]==eof) break;
len++;
}
str[len]='\0';
//接下来对str中的单词进行处理啦,这里自己写,逐个地读,判断是不是要删除的那个,不是的话,就写入out文件中
}
//最后,删除原文件,把tmp.txt代替原文件
fclose(in);
fclose(out);
remove("原文件.txt");
rename("tmp.txt","原文件.txt");
xoaxa
推荐于2017-12-16 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3471万
展开全部
#include <stdio.h>
#include <string.h>

int main() {
char infilename[] = "indata.txt";
char outfilename[] = "outdata.txt";
char str[81]; // 假定每个文件名不超过80个字符
char s[81];
FILE *fin,*fout;
fin = fopen(infilename,"rt");
fout = fopen(outfilename,"wt");
if(fin == NULL || fout == NULL) {
printf("不能打开文件。\n");
return 1;
}
printf("待删除的字符串:");
gets(str);
while(fgets(s,81,fin))
if(strcmp(str,s)) fprintf(fout,"%s",s);
fclose(fin);
fclose(fout);
return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2014-07-01 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6412万
展开全部
共享你的程序代码,趁现在有时间,我帮你改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2014-07-01 · TA获得超过718个赞
知道小有建树答主
回答量:1179
采纳率:0%
帮助的人:618万
展开全部
如果你之前用结构体就好办多了~~
追问
因为这个只是用来存文件名的,所以没有必要用结构体吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式