CStdioFile对文件的某一行进行修改

geriwolf 2008-01-18 09:34:08
举个例子,有一文本文件test.txt如下:
192.168.1.1:1,60.000,60.000
192.168.1.1:2,60.000,60.000
192.168.1.1:3,60.000,60.000
192.168.1.1:5,60.000,60.000
192.168.1.1:21,60.000,60.000
192.168.1.1:34,60.000,60.000
192.168.1.1:35,60.000,60.000
192.168.1.1:66,60.000,60.000
192.168.1.1:123,60.000,60.000
192.168.1.1:234,60.000,60.000

我想找到192.168.1.1:21这行,并将其后面的值改为40.000,40.000,即这行值变为“192.168.1.1:21,40.000,40.000”

如何能够只在一个文件里操作,不用写第二个文件?
用CStdioFile.ReadString()和CStdioFile.WriteString()能够实现吗?
借助CFile.Seek()可不可以?
...全文
891 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andyjia 2012-06-27
  • 打赏
  • 举报
回复
7楼的答案不错哦,学习了。
wuhe0507 2010-04-15
  • 打赏
  • 举报
回复
7楼的答案很有用,谢谢了。
jameshooo 2008-01-18
  • 打赏
  • 举报
回复
不是我太晚,是你结帖太快,呵呵
shakaqrj 2008-01-18
  • 打赏
  • 举报
回复
哦,我七楼有各地方错了
应该是
file.Seek(-2-str.GetLength(),CFile::current);
file.Write("192.168.1.1:21,40.000,40.000\n",strlen("192.168.1.1:21,40.000,40.000"));
geriwolf 2008-01-18
  • 打赏
  • 举报
回复
哎呀,楼上来晚了,刚结完帖

7楼的答案是可以的
jameshooo 2008-01-18
  • 打赏
  • 举报
回复
用fstream吧,用getline方法读取每一行,把你感兴趣的行修改后再写回去
geriwolf 2008-01-18
  • 打赏
  • 举报
回复
摸索过了

我现在是用两个CStdioFile实现的,会生成两个文件
CStdioFile sfp1,sfp2
用sfp1.ReadString(strValue)读一个文件里的内容,然后对strValue进行操作,
if有要找的内容,就更新strValue的值后用sfp2.WriteString()写进另一个文件test2.txt,
else直接用sfp2.WriteString()将strValue写进test2.txt;

我想只用一个文件来读写
这个问题我已经查了很多搜了很久试了很多次了,没实现得了
才到这里来提问的
datoucaicai 2008-01-18
  • 打赏
  • 举报
回复
楼主需要例程么?呵呵
古月无华 2008-01-18
  • 打赏
  • 举报
回复
最笨的办法是,把txt中的数据一行一行的读出来,取每一行中第一下“,”前的字符串,然后和你要改的数据IP进行比较,如果相等就用你的新值替换掉“,”后面的值,重新写进txt去就OK了,如果不相等接着找,找到为止!希望对你有帮助!
shakaqrj 2008-01-18
  • 打赏
  • 举报
回复

CStdioFile file;
file.Open("a.txt",CFile::modeReadWrite);
CString str;
while(true){
file.ReadString(str);
if(str.Left(str.Find(",",0))==CString("192.168.1.1:21")){
file.Seek(0,CFile::current);
file.Write("192.168.1.1:21,40.000,40.000",strlen("192.168.1.1:21,40.000,40.000"));
break;
}
}
file.Close();
Joyfulmath 2008-01-18
  • 打赏
  • 举报
回复
先用CFile.Seek()把指针指到21后面就可以了.
zhoujianhei 2008-01-18
  • 打赏
  • 举报
回复
其实楼主应该自己摸索一下,又不是很复杂。
geriwolf 2008-01-18
  • 打赏
  • 举报
回复
我想知道如何实现,而不是仅了解能不能实现
geriwolf 2008-01-18
  • 打赏
  • 举报
回复
拜托,楼上的,你这样回答我不给分你的哦~~
ouyh12345 2008-01-18
  • 打赏
  • 举报
回复
应该可以,自己做个测试
zhoujianhei 2008-01-18
  • 打赏
  • 举报
回复
可以
可以
可以

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧