如何删除文本文件最后一行或两行的问题

flyskytoday 2009-07-10 09:12:39
对一个已存在文本文件重新写入,用的是CStdioFile类

问题是:
1.如果我不在读完文件后再写入会出现最后一行存在和倒数第二行重复
2.如果我在读完后追加写入一个"\n"会多出一行空白的,就是比原文件要增加一行,也是说最后两行都为空行


PS:要删除其中某一行,边读边写,遇到符合删除条件的就用下一行替代,达到删除目的。
可能要有人建议重建一个文件,那是可以实现,但那样不是我想要的效果
...全文
454 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingchenzx 2009-07-10
  • 打赏
  • 举报
回复
看不明白啊...
HellowKitty 2009-07-10
  • 打赏
  • 举报
回复
试一下CFile::SetLength或者::SetFileValidData,设置有效长度,相当于删了最后的数据
路人乙2019 2009-07-10
  • 打赏
  • 举报
回复
还是没听明白.
liangxd09 2009-07-10
  • 打赏
  • 举报
回复
明白什么意思了,相当于 一段很多行的字符串,查找每一行,符合的,删除掉,并用下一行补上,继续找。

操作完之后,把文件长度设置一下:原来的大小 - 删除的字节
快乐鹦鹉 2009-07-10
  • 打赏
  • 举报
回复
那你就删除行就行了。为何只看到WriteString,有何来你的问题?
flyskytoday 2009-07-10
  • 打赏
  • 举报
回复
此程序要实现的功能就是删除某一行
快乐鹦鹉 2009-07-10
  • 打赏
  • 举报
回复
你说“如果读取过程中,发现符合要求的行,就删除 ”
可在你的程序中只看到WriteString
你到底在实现什么功能?
flyskytoday 2009-07-10
  • 打赏
  • 举报
回复
今天在公司时测试和在家里测试结果居然不一样,,,真是郁闷
对文件操作,,,好晕~
flyskytoday 2009-07-10
  • 打赏
  • 举报
回复
上面我说明白了呀,,,边读边写
一个文件一边读,一边写
如果读取过程中,发现符合要求的行,就删除

FilePath="c:\\test.txt";
RemoveUrl="http://www.baidu.com";
CStdioFile sfr(FilePath,CFile::typeText|CFile::shareDenyNone|CFile::modeRead);
CStdioFile sfw(FilePath,CFile::typeText|CFile::shareDenyNone|CFile::modeWrite);
if(sfr && sfw)
{
CString strLine;
while (sfr.ReadString(strLine))
{
if((strLine==RemoveUrl)||(strLine==""))
{
continue;
}
sfw.WriteString(strLine+'\n');
}
sfw.WriteString("\n");
}
sfw.Close();
sfr.Close();
barech 2009-07-10
  • 打赏
  • 举报
回复
没有用过CStdioFile,但是,我觉得happyparrot说的有道理


在File中,直接移动到文件末尾,然后写入数据
快乐鹦鹉 2009-07-10
  • 打赏
  • 举报
回复
你的问题我就觉得不明白。打开文件后,移动到文件尾再写入数据就行了。哪里来的覆盖问题?

16,472

社区成员

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

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

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