VC MFC(EXE) 中怎样写入一行字符串替换原有文件中的某行。

如:txt文件内容:aaaaabbbbccccddeeeeeeeeeewoi1234dwewgww0000000000000000改为:aaaaabbbbccccddee... 如:
txt 文件内容:
aaaaa bbbb cccc dd eeeeeeeee
ewoi 1234 dwew gww
0000000000000000

改为:
aaaaa bbbb cccc dd eeeeeeeee
ewoi 9999 dwew gww (此行第二组数据更改)
0000000000000000
展开
 我来答
moonstara
2011-07-20
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
新建一文件 读原文同时写文件 ,读到要替换的内容时改用新数据写入之后再继续读写 ,删除原文件.附思路:
if (nx_file.Open(srcspc,CFile::modeReadWrite|CFile::modeNoTruncate|CFile::typeText))
{
nx_file.SeekToBegin();
cnt=0;
if (!dst_file.Open(dstspc,CFile::modeCreate|CFile::modeWrite|CFile::typeText))
{
continue ;
}
while (nx_file.ReadString(read_strs))
{
if (cnt == 0)
{
strcpy(info,read_strs);
linno_ln=strlen(info);
for (int i=0; i<13; i++)
strcpy(str_all[i],"");
Ask_devid_strs(info, str_all, " ");
int linno=0;
for ( i=0; i<13; i++)
{
if (strlen(str_all[i]) > 0)
linno++;
}
strcpy(info,"");
strcpy(insert_strs,"");
if (linno == 3)
{
sprintf(info,"%s %s %s\n",str_all[0],PC_name,str_all[2]);
strcpy(machine_no,str_all[2]);
}
else if (linno == 4)
{
sprintf(info,"%s %s %s %s\n",str_all[0],PC_name,str_all[2],str_all[3]);
strcpy(machine_no,str_all[3]);
}
dst_file.SeekToBegin();
dst_file.WriteString(info);
}
else
{
dst_file.SeekToEnd();
sprintf(info,"%s\n",read_strs);
dst_file.WriteString(info); }
cnt++;
}
dst_file.Close();
nx_file.Close();
DeleteFile(srcspc);
gm7996
2011-07-19 · TA获得超过1199个赞
知道小有建树答主
回答量:645
采纳率:100%
帮助的人:545万
展开全部
文件内容替换确实比较麻烦一点, 2种思路

1 是把文件内容全读到内存 在内存中改写指定内容后 再把内容写回本文件 缺点是文件大内存则大
2 是新建另一临时文件 读原文同时写临时文件 读到要替换的内容时 改用新数据写入 之后再继续读写 最后把原文件删除 用临时文件重命名为原文件名 达到替换的目的

我采用方法2简单演示下
请在c盘根目录用记事本建一个文件 input.txt
内容举例如下

------------------------------------------------------------------------

12345 abcde
888 000 888
qq 10000
cmcc 10086
...

------------------------------------------------------------------------
这样最后会生成一个新文件 output.txt 这里是你要的内容
怎么办呢 删原来文件 把新文件命名成原文件名 这个不说了 不是本文要讨论的 自己查msdn
删文件 DeleteFile
重命名 MoveFile

int main()
{
char line[128];
FILE *pf1 = NULL, *pf2 = NULL;

if ((pf1 = fopen("c:\\input.txt", "r")) == NULL)
{
printf("file error\n" );
return -1;
}

if ((pf2 = fopen("c:\\output.txt", "w+")) == NULL)
{
printf("file error\n" );
return -1;
}

int i;
for (i = 0;;i++)
{
if (fgets(line, 128, pf1) != NULL)
{
// 假如我们改第2行
if (i == 1) // 从0开始, 因此1代表第二行
{
fputs("1212132 qq +++ \r\n", pf2);
printf("1212132 qq +++ \r\n"); // 打印只是用于调试
}
else
{
fputs(line, pf2);
printf("%s", line); // 打印只是用于调试
}
}
}

fclose(pf1);
fclose(pf2);

return 0;
}

如果不是纯c 用String库和正则表达式更简单
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wkr2005
2011-07-19 · TA获得超过279个赞
知道小有建树答主
回答量:434
采纳率:0%
帮助的人:307万
展开全部
使用CStdioFile 按行读取,并按行修改后写入:
CStdioFile file;
CString str;
file.Open("test.txt",CFile::modeRead,NULL);
while(file.ReadString(strRead))
{
...;
}

file.Close();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huanglulu308
2011-07-19
知道答主
回答量:19
采纳率:0%
帮助的人:0
展开全部
如:
txt 文件内容:
aaaaa bbbb cccc dd eeeeeeeee
ewoi 1234 dwew gww
0000000000000000

改为:
aaaaa bbbb cccc dd eeeeeeeee
ewoi 9999 dwew gww (此行第二组数据更改)
0000000000000000
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Xuxu8511
2011-07-19 · TA获得超过388个赞
知道小有建树答主
回答量:1344
采纳率:0%
帮助的人:770万
展开全部
读入文件数据,判别如果是1到4的数字就改成9即可。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式