怎样用c++删除文本的最后一行?

dwlzz 2009-05-07 10:17:18
怎样用c++删除文本的最后一行?帮忙写个简单的代码吧
...全文
1501 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
liliangbao 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hairetz 的回复:]
文件操作,没有删除这个功能,所谓的删除,只是重写。

比较快的就是定位文件指针到文件尾,然后从后面开始读数据,读到第一个换行符,仍然会记录指针偏移。

在此位置截断文件。
[/Quote]
正解!
lpf000 2009-05-07
  • 打赏
  • 举报
回复
移动文件指针到末尾,读取就没了,怎么判断就看你怎么需要了
mengde007 2009-05-07
  • 打赏
  • 举报
回复
先指针移动到文件末尾;然后向上偏移;最后截断之;
nwao7890 2009-05-07
  • 打赏
  • 举报
回复
文件不大的话,可以读出你要的内容写到新文件中,最后删掉原来的文件,再把新文件的名字改成原来的名字。这是种笨办法,我还不会其它的,继续关注。
lingyin55 2009-05-07
  • 打赏
  • 举报
回复
写了一个

原先的a.txt

fadfdasfas
fdfadf
fdafda
111111111

执行后

fadfdasfas
fdfadf
fdafda



#include <windows.h>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{

vector<string> tmp_files;

ifstream winfile( "a.txt" );
if ( ! winfile )
{
cout << "fail" << endl;
return 0;
}

string lineContent;
while ( getline( winfile, lineContent, '\n' ) )
{
tmp_files.push_back( lineContent + "\r\n" );
}

winfile.close();

ofstream offile( "a.txt",ios::out );
vector<string>::iterator siter = tmp_files.begin();

copy( tmp_files.begin(), tmp_files.end()-1, ostream_iterator<string>(offile) );

cout << "ok!" << endl;

offile.close();

return 0;
}



  • 打赏
  • 举报
回复
文件操作,没有删除这个功能,所谓的删除,只是重写。

比较快的就是定位文件指针到文件尾,然后从后面开始读数据,读到第一个换行符,仍然会记录指针偏移。

在此位置截断文件。
icansaymyabc 2009-05-07
  • 打赏
  • 举报
回复
计算出最后一行文本的长度,把文件长度改小那么多字节即可。
lingyin55 2009-05-07
  • 打赏
  • 举报
回复
可以把指针设定在文件的最后,然后从最后面的读起,读到换行回车“\r\n”时认为那些就是最后
一行,然后删除。

或者把除最后一行的前面部分读取出来,保存到另一个文件,这种比较适合文件小的情况。
lingyin55 2009-05-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20040820/09/3292612.html
光宇广贞 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 coding_hello 的回复:]
打开文件后,进行内存映射,然后从内存中的结束位置网前搜索换行符,找到位置后关闭映射,用SetEndOfFile设置文件尾,然后关闭文件即可。
[/Quote]

支持这种方法,一种全新的思路,却可能是最接近文件本质的操作。
winingsky 2009-05-07
  • 打赏
  • 举报
回复
重写一遍
nullw 2009-05-07
  • 打赏
  • 举报
回复
从文件尾读起的请注意 utf-8 和双字节问题,在最后换行使用文件截断.
thinkboy234 2009-05-07
  • 打赏
  • 举报
回复
学习~~
aaaa3105563 2009-05-07
  • 打赏
  • 举报
回复
学习··
fairchild811 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hairetz 的回复:]
文件操作,没有删除这个功能,所谓的删除,只是重写。

比较快的就是定位文件指针到文件尾,然后从后面开始读数据,读到第一个换行符,仍然会记录指针偏移。

在此位置截断文件。
[/Quote]

up
野男孩 2009-05-07
  • 打赏
  • 举报
回复
打开文件后,进行内存映射,然后从内存中的结束位置网前搜索换行符,找到位置后关闭映射,用SetEndOfFile设置文件尾,然后关闭文件即可。

65,191

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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