CStdioFile修改指定行解决方法
CStdioFile修改指定行
比如文本内容:
2012-3-13 1722 XXXXXXX
2012-3-13 1723 XXXXXXX
2012-3-13 1724 XXXXXXX
2012-3-13 1725 XXXXXXX
2012-3-13 1726 XXXXXXX
2012-3-13 1727 XXXXXXX
2012-3-13 1728 XXXXXXX
2012-3-13 1729 XXXXXXX
2012-3-13 1730 XXXXXXX
2012-3-13 1731 XXXXXXX
2012-3-13 1732 XXXXXXX
比如要在1725那行 最后面加上 ZZZZ 修改后就是
2012-3-13 1722 XXXXXXX
2012-3-13 1723 XXXXXXX
2012-3-13 1724 XXXXXXX
2012-3-13 1725 XXXXXXX ZZZZ
2012-3-13 1726 XXXXXXX
2012-3-13 1727 XXXXXXX
2012-3-13 1728 XXXXXXX
2012-3-13 1729 XXXXXXX
2012-3-13 1730 XXXXXXX
2012-3-13 1731 XXXXXXX
2012-3-13 1732 XXXXXXX
用CStdioFile的 ReadString 在find 之后的seek怎么找啊
求大牛们指点迷津
------解决方案--------------------
你可以用find之后得到位置,在从那个位置write(),seek()这个是定位的,你也可以用SetFilePointer()
------解决方案--------------------
你的CStdioFile使用ReadString读取的时候那个Seek也在移动,(个人认为)你只要是使用CStdioFile这一个对象操作,那么Seek的移动就是一致的,也就是说你使用
CStdioFile file;
while(file.ReadString(strRead))
{
...;
}
来读取数据的时候你只要找到2012-3-13 1725 XXXXXXX这个串,再使用WriteString这个时候应该就是覆盖到原来的那个串。
(没有测试过,只是个人感觉,你可要测试一下)
------解决方案--------------------
如果你知道要修改的数据在第几行,就可以按1楼的seek方法和3楼的方法做
如果你不知道要修改的数据在第几行,就查找关键字,看你给的数据,年月日后面的数据象1722都是累加的,这就好查找了,可以读一块,先判断最后一个数据是不是大于你要修改的数据,如果不大于,就再读下一块,否则,就在当前读的块查找,找到后记录下所在的文件位置(就是行数),然后再用seek()来移到这位置,修改后覆盖就行了
楼主编完程序后用单步执行看结果是不是正确
------解决方案--------------------
不能这样,后面的东西会被覆盖掉,最好的办法是新建一个新文件,写入修改数据其他部分原样COPY,然后删除原文件,再改名。
------解决方案--------------------
比如文本内容:
2012-3-13 1722 XXXXXXX
2012-3-13 1723 XXXXXXX
2012-3-13 1724 XXXXXXX
2012-3-13 1725 XXXXXXX
2012-3-13 1726 XXXXXXX
2012-3-13 1727 XXXXXXX
2012-3-13 1728 XXXXXXX
2012-3-13 1729 XXXXXXX
2012-3-13 1730 XXXXXXX
2012-3-13 1731 XXXXXXX
2012-3-13 1732 XXXXXXX
比如要在1725那行 最后面加上 ZZZZ 修改后就是
2012-3-13 1722 XXXXXXX
2012-3-13 1723 XXXXXXX
2012-3-13 1724 XXXXXXX
2012-3-13 1725 XXXXXXX ZZZZ
2012-3-13 1726 XXXXXXX
2012-3-13 1727 XXXXXXX
2012-3-13 1728 XXXXXXX
2012-3-13 1729 XXXXXXX
2012-3-13 1730 XXXXXXX
2012-3-13 1731 XXXXXXX
2012-3-13 1732 XXXXXXX
用CStdioFile的 ReadString 在find 之后的seek怎么找啊
求大牛们指点迷津
------解决方案--------------------
你可以用find之后得到位置,在从那个位置write(),seek()这个是定位的,你也可以用SetFilePointer()
------解决方案--------------------
你的CStdioFile使用ReadString读取的时候那个Seek也在移动,(个人认为)你只要是使用CStdioFile这一个对象操作,那么Seek的移动就是一致的,也就是说你使用
CStdioFile file;
while(file.ReadString(strRead))
{
...;
}
来读取数据的时候你只要找到2012-3-13 1725 XXXXXXX这个串,再使用WriteString这个时候应该就是覆盖到原来的那个串。
(没有测试过,只是个人感觉,你可要测试一下)
------解决方案--------------------
如果你知道要修改的数据在第几行,就可以按1楼的seek方法和3楼的方法做
如果你不知道要修改的数据在第几行,就查找关键字,看你给的数据,年月日后面的数据象1722都是累加的,这就好查找了,可以读一块,先判断最后一个数据是不是大于你要修改的数据,如果不大于,就再读下一块,否则,就在当前读的块查找,找到后记录下所在的文件位置(就是行数),然后再用seek()来移到这位置,修改后覆盖就行了
楼主编完程序后用单步执行看结果是不是正确
------解决方案--------------------
不能这样,后面的东西会被覆盖掉,最好的办法是新建一个新文件,写入修改数据其他部分原样COPY,然后删除原文件,再改名。
------解决方案--------------------