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 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示