hur.cn - 华软网

 热门搜索

在vc++的.txt文件中删除指定字符串

  作者:未知    来源:网络    更新时间:2010/6/10
各位大侠,帮帮忙吧
---华软 网友回答---
好像只能重写某快数据,没有直接删的API。

---华软网友回复---
可以一行行的读取出来,然后针对每行读取出来的字符串,遍历你要找的那段字符串,删除后再写回去剩下的
---华软网友回复---
 extern CStdioFile f;
char buf[100];
f.ReadString( buf, 99 );

---华软网友回复---
先读出一部分来,看看里面有没有要删除的字串,有则删除,然后写到新的文本文件中,这样可能快很多
---华软网友回复---
C++">//用otr替换nFileName里的str
void Replase(char *nFileName,char *str,char *otr)
{
     int  len;
     int  i;
     FILE *fp1,*fp2;
     len=strlen(str);
     char buf[len];
     
     fp1=fopen(nFileName,"rb");
     if(NULL==fp1) return;
     fp2=fopen("temp.dat","wb");//临时文件

     fread(buf,len,1,fp1);       //先读和替换字串一样多的字符
     if(feof(fp1)) return;       //如果此时文件结束说明文件太小.
   
     while(1)
     {
         if(memcmp(str,buf,5))  //如果相同,需要替换
         {
             fwrite(otr,strlen(otr),1,fp2);//将替换的内容写如临时文件
             fread(buf,len,1,fp1);    //重新读替换字串一样多的字符
          }
          else     //不同的情况不需要替换
          {
             fputc(buf[0]);          //输出第一个字符
             for(i=0;i<len-1;i++)    //后面的字符往前移
               buf[i]=buf[i+1];
             buf[len-1]=fgetc(fp1);  //读一个字符补满
          }
          if(feof(fp1)) //如果此时检测到文件结束
          {
              fwrite(buf,strlen(buf),1,fp2);//写入剩余的字符
              break;    //退出循环.
          }
     }
     fclose(fp1);
     fclose(fp2);
     //这里是拷贝临时文件覆盖源文件的代码,俺就省了
}

     
---华软网友回复---
可以一行行的读出来,删除掉不要的内容,再存到一个临时文件中,然后改名。
---华软网友回复---
引用 6 楼 wltg2001 的回复:
可以一行行的读出来,删除掉不要的内容,再存到一个临时文件中,然后改名。

我也这么想的
---华软网友回复---
一行一行替换有漏洞

如果要替换 "aa\nbb" 为"aa\rbb"
也就是替换换行符为回车符怎么办?

在网页上拷贝内容粘贴到WORD里
换行符号在WORD表现为↓,和回车符是不同的

所以个人认为用5楼的办法好
文本方式和二进制方式都通吃

---华软网友回复---
KMP算法
---华软网友回复---
文件小的话,直接读取全部数据,然后修改,最后写回文件中去。大文件的话,考虑使用内存映射文件
---华软网友回复---
呵呵 可不可以用RePlace来实现呢!
strTemp("你要删除的字符串","");用空字符替换
不知可以不!!
---华软网友回复---
strTemp.Replace("你要删除的字符串","");
---华软网友回复---
看看给分者的回复
---华软网友回复---
谢谢分享      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。