c++怎样删除txt文件中的一行? ?

我有个文件:001xxxxxxxxx002xxxxxxxxx003xxxxxxxxx要删除002那一行要怎么操作呢?谢~... 我有个文件:
001 xxx xxx xxx
002 xxx xxx xxx
003 xxx xxx xxx
要删除002那一行要怎么操作呢?
谢~
展开
 我来答
Frank7258
2011-03-10 · TA获得超过1503个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:553万
展开全部
最简单的就是用fgets一行一行读出文字,你读一行然后往另外一个文件里面写一行,跳过你要删除的行。这样你新的文件就没有了要删除的行,最后删除旧文件,把新文件重命名即可。

对于小文件,干净点的方法是
1. 分配大于文件长度的两块内存,取名缓冲区1和缓冲区2
2. 文件全部读入内存缓冲区1,关闭文件,然后复制到缓冲区2,复制的时候跳过要删除的内容
3. 然后重新以w方式打开文件,把缓冲区2的内容写入文件
4. 释放两个内存缓冲区
C运行库相关的函数为fopen, fclose, fread, fwrite, 分配村内malloc,释放内存free, 复制memcpy或者循环。
Windows API为CreateFile, CloseHandle, ReadFile, WriteFile。分配内存HeapAlloc, 释放内存HeapFree。大内存可以直接用Windows API VirtualAlloc和VirtualFree,这两个函数按页64k分配内存,可以申请巨大内存。
adfort
2011-03-09 · TA获得超过763个赞
知道小有建树答主
回答量:219
采纳率:0%
帮助的人:98万
展开全部
1.文件小的话,完整读入内存,在内存中删除,然后以写方式清空原始文件并覆盖;
2.文件大的话,先逐段读取,确认要删除的起止位置,然后将之后的内容分段读出并覆盖到前面,最后截去文件多余的长度;
3.如果磁盘足够大,也可以从头读取原始文件并转存到一个缓存文件,遇到要删除的地方则跳过不写,所有内容都写入缓存文件后,将缓存文件整个copy覆盖原始文件,删除缓存文件.

c++没有提供像编辑器那样提供那么简单快捷的直接删除方法,只能够覆盖写过去.
追问
文件很小,求问怎么读入内存再删除啊?
新手= =
追答
我用C和C++混编的居多,大体如下
1.用fopen以只读形式打开文件,用filelength取得文件长度,记为len,new一块(文件长度+1)的char *buf内存区,fseek到文件开头,fread文件全部内容到buf,关闭文件
2.检索'\n',最开始是第一行,遇到一个'\n',后面开始就是第二行,然后再遇到,后面第三行...,确认你要删除文件内容的起始位置,例如删除第二行,索引从0开始,假定第一个'\n'索引为P1,第二个'\n'索引为P2,那么删除部分索引为,从(P1+1)到P2,如果P2后面还有内容,memcpy或者memmove,把P2及后面的内容移到P1处,例如memcpy(buf+P1,buf+P2,len-1-P2);
3.len-=(P2-P1),
4.用只写方式打开文件,把buf内容写进文件,长度为3里面计算得到的len
5.关闭文件,delete[] buf;

代码略,具体函数请自行寻找资料,文件打开失败等相关容错自行考虑.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mwtnh1987
2011-03-10 · TA获得超过118个赞
知道答主
回答量:150
采纳率:0%
帮助的人:173万
展开全部
将文件读出来,读到CString 中 找到第一个换行符'\n' 的位置 pos1和第二个换行符的位置pos2 将中间的字符串截掉~ 怎么截~ 自己去查CString的API.. 在将获得的新的字符串 覆盖到原来的文件中~~ 当然这是对于文件内容比较少的情况下~~ 比较大的文件,你就得逐段读取了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
桐荏通清雅
2020-07-01 · TA获得超过3970个赞
知道大有可为答主
回答量:3127
采纳率:26%
帮助的人:194万
展开全部
创建一个临时文件
从源文件中读出一行,并判断是不是要删除的行,如果不是,则将该行写入临时文件,然后再读下一行;如果是则直接读下一行,……,直到把源文件处理完
删除源文件
将临时文件改名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-03-10 · TA获得超过303个赞
知道小有建树答主
回答量:316
采纳率:100%
帮助的人:167万
展开全部
将里面的信息都读到结构体中 然后在结构体中删除 然后 新建该文件 写入信息
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式