我想编辑一个文件,找到其中的一个字符串将其替换,比如将“192.168.88.7”替换为“192.168.88.142”(根据输入,所以长度不固定),我试过fseek,fwrite好像都不行,因为我的目标和源字符串可能长度不相等,请教各位该如何做?最好能给段简单源码!谢谢了

解决方案 »

  1.   

    CStdioFile file1;
    CString temp,ss;
    file1.Open("4.txt",CFile::modeRead);
    while(file1.ReadString(temp))
    {
    temp.Replace("192.168.88.6","192.168.88.142");
    ss+=temp+"\n";
    }
    file1.Close();
    file1.Open("4.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate);
    file1.WriteString(ss);
    file1.Close();
                    应该可以,你试试吧,不过文件名是4.txt
      

  2.   

    每个帖子我都看了,没有一个答案是对的,可能我没说清楚,我需要用fopen之类的函数,而不是用MFC或者STL,另外我的“192.168.88.7"是不顾定位置的。急,所以多开了贴,只要有人回答出来,所有帖子分数都可以给你,如果需要,还可以另加分。分数本来就是用来交流的,我不会小气的:)
      

  3.   

    0.把内容读到一块内存中
    1.记录一个未写位置nWriteIndex=0;
    2.从nWriteIndex搜索192.168.88.7
    3.如果没找到
        3.1把从nWriteIndex到当前的位置的内容写入文件
      3.2结束
    4.如果找到
        4.1把从nWriteIndex到当前的位置的内容写入文件
        4.2把192.168.88.142写入文件
      4.3修改未写入文件位置为:nWriteIndex=当前位置+strlen("192.168.88.7")
      4.4重复2
      

  4.   

    同意 Cline(营营)的观点,如果文件不太大。
    需要做一个字符串比对函数定位。
      

  5.   

    :)谢谢各位,思想我大概知道,但关键是代码,想偷懒!:)目前想了个偷懒的办法,创建一个不可见的多行CEdit,然后把内容读入,再每行查找关键字,找到后用replacesel替换,实在是太懒了,所以想出这么个馊主意。不过考虑到也有和我一样懒的人,所以还是写出来,不怕丢脸!:)帖子再留2天,看看是不是还有好的答案,到时候一起给分!
      

  6.   

    CStringArray strarray;
    CStdioFile file;
    if( !file.Open("c:\\1.txt", CFile::modeRead) )
    {
    AfxMessageBox("can not open file!");
    return;
    }
    CString strLine;
    while(file.ReadString(strLine))
    {
    if(strLine.Find("192.168.88.7") != -1)
    strLine.Replace("192.168.88.7", "192.168.88.142"); strarray.Add(strLine);
    }
    file.Close();

    if( !file.Open("c:\\1.txt", CFile::modeCreate|CFile::modeWrite) )
    {
    AfxMessageBox("can not open file!");
    return;
    }
    for(i=0; i<strarray.GetSize(); i++)
    {
    str = "";
    str = strarray[i] + "\n";
    file.WriteString(str);
    }
    file.Close();
      

  7.   

    :) 谢谢楼上们,你们说的方法都是有限制的,仔细想象就应该知道的。不过到这就结束了,以后再开帖讨论吧。不结帖CSDN又要减少我的信誉分了!对CSDN提点意见,我很多帖子都是没人回答出来答案,但被强行揭帖,导致我的信誉分大大降低,其实我是很有信誉的,冤啊!!!
      

  8.   

    :) 谢谢楼上们,你们说的方法都是有限制的,仔细想象就应该知道的。不过到这就结束了,以后再开帖讨论吧。不结帖CSDN又要减少我的信誉分了!对CSDN提点意见,我很多帖子都是没人回答出来答案,但被强行揭帖,导致我的信誉分大大降低,其实我是很有信誉的,冤啊!!!