lnhv013710 2019-05-15 02:05 采纳率: 96.7%
浏览 577
已采纳

VS2010 MFC 只用CstdioFile 成员得话,如何替换,插入字符,

麻烦哪位高手帮我把文本文件中的5行中的“xxxxx”替换成“123456789123456789123456789”,不要覆盖下一行的文本。然后用@替换"123456789123456789123456789”中的第6位,然后将指针移到行尾。

急求实现代码,顺便解答一下我的代码后面注释得问题,谢谢。

我的基本思路是readstring读一行,替换或插入等处理当前行数据,再writestring写入文件(不能影响覆盖下一行),将指针移动到下一行,继续轮询读>处理>写。

不想把整个文件都放入数组处理后删除原来文件的再重生成新文件的方法。

刚才网友说:没法实现,总之,这个问题我多留几天,最后选最优的代码(包括删了文件再重写)

另外:我虽然是新手,但是目前为止我提的所有问题都会把分给网友,不管有没有解决问题,最后只要我觉的有帮助,就会把分给我的感觉最有帮忙的。非常感谢大家百忙中能抽时间解答我的疑惑。

更改前的文件
99999
99999
xxxxx
99999
99999

要求更改后的文件
99999
99999
12345@789123456789123456789
99999
99999

下面是我写的代码,在插入"123456789123456789123456789”后总是会覆盖下一行。

while(file.ReadString(strText))
{
int dwPosStart = (DWORD)file.GetPosition() - (_tcslen(strText) + _tcslen(_T("\r\n")));//当前的行头。

    if(strText.Find("xxxxx")>=0)  //判断当前行是否存在xxxxx
        {       
            file.Seek((dwPosStart), CFile::begin); //seek到行首  
            file.WriteString("123456789123456789123456789\r\n");    //从行头写入一串字符串,这里如何避免覆盖下一行?只覆盖当前行,指针如何返回行尾?
            file.Seek(dwPosStart+5, CFile::begin); //seek到行首+5的位置
            file.WriteString("@");   //将@行中插入代替6,
            CString strTest;
            //file.ReadString(strTest);//这里我想用readstring把指针移到行尾,但是反而把文件给改写了,为啥read能改文件数据?

            file.Close();
            break;
我的代码最后生成了这些,writestring和readstring连用后,readstring改变了文件内容!!!
99999
99999
12345@3456789123456789123456789
  • 写回答

4条回答 默认 最新

  • threenewbee 2019-05-15 09:18
    关注

    文本文件没有办法直接在文件里替换一个长度不同的内容,唯一的办法是全部读取到内存,修改,再写回去。
    代码这次就不写了,以免别人的回答更好,或者lz有需求的变更,那就白费力气了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备