c++怎样删除txt文件中的一行? ?
我有个文件:001xxxxxxxxx002xxxxxxxxx003xxxxxxxxx要删除002那一行要怎么操作呢?谢~...
我有个文件:
001 xxx xxx xxx
002 xxx xxx xxx
003 xxx xxx xxx
要删除002那一行要怎么操作呢?
谢~ 展开
001 xxx xxx xxx
002 xxx xxx xxx
003 xxx xxx xxx
要删除002那一行要怎么操作呢?
谢~ 展开
6个回答
展开全部
最简单的就是用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分配内存,可以申请巨大内存。
对于小文件,干净点的方法是
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分配内存,可以申请巨大内存。
展开全部
1.文件小的话,完整读入内存,在内存中删除,然后以写方式清空原始文件并覆盖;
2.文件大的话,先逐段读取,确认要删除的起止位置,然后将之后的内容分段读出并覆盖到前面,最后截去文件多余的长度;
3.如果磁盘足够大,也可以从头读取原始文件并转存到一个缓存文件,遇到要删除的地方则跳过不写,所有内容都写入缓存文件后,将缓存文件整个copy覆盖原始文件,删除缓存文件.
c++没有提供像编辑器那样提供那么简单快捷的直接删除方法,只能够覆盖写过去.
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;
代码略,具体函数请自行寻找资料,文件打开失败等相关容错自行考虑.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将文件读出来,读到CString 中 找到第一个换行符'\n' 的位置 pos1和第二个换行符的位置pos2 将中间的字符串截掉~ 怎么截~ 自己去查CString的API.. 在将获得的新的字符串 覆盖到原来的文件中~~ 当然这是对于文件内容比较少的情况下~~ 比较大的文件,你就得逐段读取了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
创建一个临时文件
从源文件中读出一行,并判断是不是要删除的行,如果不是,则将该行写入临时文件,然后再读下一行;如果是则直接读下一行,……,直到把源文件处理完
删除源文件
将临时文件改名
从源文件中读出一行,并判断是不是要删除的行,如果不是,则将该行写入临时文件,然后再读下一行;如果是则直接读下一行,……,直到把源文件处理完
删除源文件
将临时文件改名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将里面的信息都读到结构体中 然后在结构体中删除 然后 新建该文件 写入信息
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询