在MFC中 怎样修改文件中指定的内容

ranxufeng 2013-06-19 02:07:12
我用
myFile.ReadString(a);
myFile.ReadString(b);
读出文件中的两个串 这两个 串不是在文件的开始处 为
123
456
我要怎样修改 这两个串???
我现在带代码为:
if(myFile.Open(_T("d.txt"),CFile::typeText|CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite),&fileException)
{
myFile.SeekToBegin();
while(myFile.ReadString(a))
{
myFile.ReadString(b);
if ((n5==a)&&(t5==b))
{
flag=1;break;
}
}
if(flag==1)
{
a=n6+'\n';
b=t6+'\n';
myFile.WriteString(a);
myFile.WriteString(b);
MessageBox("修改成功");
}
else
{
MessageBox("你查找的联系人不存在");
}
}
else
{
TRACE("Can't open file %s,error=%u\n",_T("d.txt"),fileException.m_cause);
}
myFile.Close();
n5 t5是查找的编辑框
n6 t6 是我定义的两个编辑框变量 为CString类
现在不能更换读出的串 求大神帮忙?
...全文
769 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen_wei 2013-06-20
  • 打赏
  • 举报
回复
把整个文件的数据读到内存变量中,修改变量字符串,然后再将字符串从内存写到文件中 这样才是解决之道。。
hsz871204 2013-06-20
  • 打赏
  • 举报
回复
引用 2 楼 ranxufeng 的回复:
[quote=引用 1 楼 hsz871204 的回复:] [quote=引用 楼主 ranxufeng 的回复:] 我用 myFile.ReadString(a); myFile.ReadString(b); 读出文件中的两个串 这两个 串不是在文件的开始处 为 123 456 我要怎样修改 这两个串??? 我现在带代码为: if(myFile.Open(_T("d.txt"),CFile::typeText|CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite),&fileException) { myFile.SeekToBegin(); while(myFile.ReadString(a)) { myFile.ReadString(b); if ((n5==a)&&(t5==b)) { flag=1;break; } } if(flag==1) { a=n6+'\n'; b=t6+'\n'; myFile.WriteString(a); myFile.WriteString(b); MessageBox("修改成功"); } else { MessageBox("你查找的联系人不存在"); } } else { TRACE("Can't open file %s,error=%u\n",_T("d.txt"),fileException.m_cause); } myFile.Close(); n5 t5是查找的编辑框 n6 t6 是我定义的两个编辑框变量 为CString类 现在不能更换读出的串 求大神帮忙?
要用临时文件,否则如果n6比n5短,就会产生垃圾。新建个临时文件,将n5前的数据从文件读到内存再写入到临时文件,再将n6,t6写入临时文件,再将t5后的数据从文件读到内存再写入到临时文件。再删掉旧文件,临时文件改成旧文件名。 也可不写入临时文件,将那些数据存在内存中,再用覆盖的方式打开文件写进去。但这样对大文件操作起来就比较吃力了[/quote] 我现在就是用覆盖的方式啊 不过根本无法用数据覆盖读出的数据。 如果在要覆盖的数据写入文件前加myFile.SeekToBegin();//指向文件开头 修改的就是文件的第一个串[/quote] 把整个文件的数据读到内存变量中,修改变量字符串,然后再将字符串从内存写到文件中
afairycell 2013-06-20
  • 打赏
  • 举报
回复
可以用Seek指针定位到文件位置,到位置了你会处理,应该有替换和ADD方法。。
ranxufeng 2013-06-19
  • 打赏
  • 举报
回复
引用 1 楼 hsz871204 的回复:
[quote=引用 楼主 ranxufeng 的回复:] 我用 myFile.ReadString(a); myFile.ReadString(b); 读出文件中的两个串 这两个 串不是在文件的开始处 为 123 456 我要怎样修改 这两个串??? 我现在带代码为: if(myFile.Open(_T("d.txt"),CFile::typeText|CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite),&fileException) { myFile.SeekToBegin(); while(myFile.ReadString(a)) { myFile.ReadString(b); if ((n5==a)&&(t5==b)) { flag=1;break; } } if(flag==1) { a=n6+'\n'; b=t6+'\n'; myFile.WriteString(a); myFile.WriteString(b); MessageBox("修改成功"); } else { MessageBox("你查找的联系人不存在"); } } else { TRACE("Can't open file %s,error=%u\n",_T("d.txt"),fileException.m_cause); } myFile.Close(); n5 t5是查找的编辑框 n6 t6 是我定义的两个编辑框变量 为CString类 现在不能更换读出的串 求大神帮忙?
要用临时文件,否则如果n6比n5短,就会产生垃圾。新建个临时文件,将n5前的数据从文件读到内存再写入到临时文件,再将n6,t6写入临时文件,再将t5后的数据从文件读到内存再写入到临时文件。再删掉旧文件,临时文件改成旧文件名。 也可不写入临时文件,将那些数据存在内存中,再用覆盖的方式打开文件写进去。但这样对大文件操作起来就比较吃力了[/quote] 我现在就是用覆盖的方式啊 不过根本无法用数据覆盖读出的数据。 如果在要覆盖的数据写入文件前加myFile.SeekToBegin();//指向文件开头 修改的就是文件的第一个串
hsz871204 2013-06-19
  • 打赏
  • 举报
回复
引用 楼主 ranxufeng 的回复:
我用 myFile.ReadString(a); myFile.ReadString(b); 读出文件中的两个串 这两个 串不是在文件的开始处 为 123 456 我要怎样修改 这两个串??? 我现在带代码为: if(myFile.Open(_T("d.txt"),CFile::typeText|CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite),&fileException) { myFile.SeekToBegin(); while(myFile.ReadString(a)) { myFile.ReadString(b); if ((n5==a)&&(t5==b)) { flag=1;break; } } if(flag==1) { a=n6+'\n'; b=t6+'\n'; myFile.WriteString(a); myFile.WriteString(b); MessageBox("修改成功"); } else { MessageBox("你查找的联系人不存在"); } } else { TRACE("Can't open file %s,error=%u\n",_T("d.txt"),fileException.m_cause); } myFile.Close(); n5 t5是查找的编辑框 n6 t6 是我定义的两个编辑框变量 为CString类 现在不能更换读出的串 求大神帮忙?
要用临时文件,否则如果n6比n5短,就会产生垃圾。新建个临时文件,将n5前的数据从文件读到内存再写入到临时文件,再将n6,t6写入临时文件,再将t5后的数据从文件读到内存再写入到临时文件。再删掉旧文件,临时文件改成旧文件名。 也可不写入临时文件,将那些数据存在内存中,再用覆盖的方式打开文件写进去。但这样对大文件操作起来就比较吃力了

16,471

社区成员

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

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

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