MFC 保存文件插入数据

独自等待945 2017-09-19 06:01:46
我在MFC中保存了控件的内容,用叠加不覆盖的方式保存,但是我需要在之前保存的数据中再插入一条数据,该怎么实现呢?
if(savefile.Open(_T("D:\\save.txt"),CFile::typeText|CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate))
{
savefile.SeekToEnd();
savefile.WriteString(_T("\n"));
savefile.WriteString(m_Code[i]+_T(" "));
savefile.WriteString(m_Materialnumber[i]+_T(" "));
savefile.WriteString(m_STime[i]+_T(" "));
savefile.WriteString(m_TTime[i]+_T(" "));
savefile.WriteString(m_state[i]+_T("\n"));
savefile.Flush();
savefile.Close();
}
那比如我已经保存了20条数据了,但是我要在某条数据后面savefile.WriteString(m_state[i]+_T("\n"));保存的数据后面再加一条数据,请问该如何实现呢?分数较少,但是希望大佬能帮我解决下,不胜感激!!
...全文
457 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
零隐 2017-09-20
  • 打赏
  • 举报
回复

CStdioFile file("C:\\Users\\lyf\\Desktop\\aa.txt", CFile::modeWrite|CFile::modeCreate);
	CString str;
	for (int i = 0; i < 30; i ++)
	{
		str.Format("第%d\r\n", i);
		file.WriteString(str);
	}

	file.Close();

	CFile file2("C:\\Users\\lyf\\Desktop\\aa.txt", CFile::modeReadWrite);
	long len = file2.GetLength();
	char *csBuff = new char[len+1];
	memset(csBuff,0, len+1);
	file2.Read(csBuff, len);
	str = csBuff;
	int index = 0;
	for (int i = 0; i < 3; i++)//第3行插入
	{
		index = str.Find("\r\n", index);
		index++;
	}
	index++;;
	file2.Seek(index, CFile::begin);
	file2.Write("第四行\r\n", strlen("第四行\r\n"));
	file2.Write(csBuff+index, strlen(csBuff+index));
	
	file2.Close();

	delete csBuff;
	csBuff = NULL;
你看下 根据你需要修改。记得给分
赵4老师 2017-09-20
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。http://bbs.csdn.net/topics/391975224
独自等待945 2017-09-19
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
只能读取文件所有的内容,然后修改数据后,再全部重新写入
大致理解,但是我不知道具体如何实现,不知道是否方便给我个代码让我套用呢
独自等待945 2017-09-19
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
只能读取文件所有的内容,然后修改数据后,再全部重新写入
引用 2 楼 fly0413 的回复:
不知道数据量大不大。 你可以这样,查找到你需要插入的位置,记下位置。 新建buff,写入你要插入的那行,记得换行符。 把文件写入位置移到那个地方要插入的位置。然后读取剩下的内容追加到buff中。 再次移到要插入位置地方,把buff追加到文件。 这不是一行一行写,是一堆数据操作。 如果可以记得给分。
数据会一直叠加保存,但是数据更新不快,所有应该不大,我基础不好,大致理解了,但是不知道怎么具体实现,不知道是否方便给个代码让我套用呢。非常感谢
零隐 2017-09-19
  • 打赏
  • 举报
回复
不知道数据量大不大。 你可以这样,查找到你需要插入的位置,记下位置。 新建buff,写入你要插入的那行,记得换行符。 把文件写入位置移到那个地方要插入的位置。然后读取剩下的内容追加到buff中。 再次移到要插入位置地方,把buff追加到文件。 这不是一行一行写,是一堆数据操作。 如果可以记得给分。
呔妖怪来嘛 2017-09-19
  • 打赏
  • 举报
回复
CFile::Seek( LONG lOff, UINT nFrom ); 可以跳转到指定位置,就是你得自己确定位置没有重新写方便
oyljerry 2017-09-19
  • 打赏
  • 举报
回复
只能读取文件所有的内容,然后修改数据后,再全部重新写入

16,472

社区成员

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

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

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