文件操作

icefireren 2004-08-06 10:51:19
我想编辑一个文件,找到其中的一个字符串将其替换,比如将“192.168.88.7”替换为“192.168.88.142”(根据输入,所以长度不固定),我试过fseek,fwrite好像都不行,因为我的目标和源字符串可能长度不相等,请教各位该如何做?最好能给段简单源码!谢谢了
...全文
128 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
icefireren 2004-08-11
:) 谢谢楼上们,你们说的方法都是有限制的,仔细想象就应该知道的。不过到这就结束了,以后再开帖讨论吧。不结帖CSDN又要减少我的信誉分了!

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

对CSDN提点意见,我很多帖子都是没人回答出来答案,但被强行揭帖,导致我的信誉分大大降低,其实我是很有信誉的,冤啊!!!
回复
lixiaosan 2004-08-09
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();
回复
icefireren 2004-08-09
:)谢谢各位,思想我大概知道,但关键是代码,想偷懒!:)

目前想了个偷懒的办法,创建一个不可见的多行CEdit,然后把内容读入,再每行查找关键字,找到后用replacesel替换,实在是太懒了,所以想出这么个馊主意。不过考虑到也有和我一样懒的人,所以还是写出来,不怕丢脸!:)

帖子再留2天,看看是不是还有好的答案,到时候一起给分!
回复
icefireren 2004-08-09
不错,可以!谢谢了!
回复
luopulzc 2004-08-07
同意 Cline(营营)的观点,如果文件不太大。
需要做一个字符串比对函数定位。
回复
kvw3000 2004-08-07
mark
回复
Cline 2004-08-07
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
回复
icefireren 2004-08-07
每个帖子我都看了,没有一个答案是对的,可能我没说清楚,我需要用fopen之类的函数,而不是用MFC或者STL,另外我的“192.168.88.7"是不顾定位置的。急,所以多开了贴,只要有人回答出来,所有帖子分数都可以给你,如果需要,还可以另加分。分数本来就是用来交流的,我不会小气的:)
回复
nineclock 2004-08-06
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
回复
louifox 2004-08-06
CStdioFile
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-06 10:51
社区公告

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