C++中怎样删除文件中的指定内容?

otfychly881989 2009-06-16 09:50:10
C++中怎样删除文件中的指定内容?例如:我有一文件test.txt,里面的内容如下:
111111
sdfsd
fdsg
sfdg
s
fg
f

123456
dgsd
fdg
fg
gfgs
af
e

222222
fdsf
fdg
fd
sdf
trr
ghd
我想删除其中一段应该怎么弄啊?希望高手们指点小弟一下,O(∩_∩)O谢谢
我写的一段代码,始终有问题
	system("cls");
cout<<endl<<"请输入您要删除车辆的车牌号:";
char Num[20];
for(int i=0;i<20;i++)
Num[i]=0; //初始化数值
cin>>Num; //输入一个字符串,与文件中的每一段的第一个字符串进行比较

ifstream reFile("车辆管理系统.txt");
if(!reFile)
{
cerr<<"Error!Can not open the File!"<<endl;
exit(1);
}

bool Delet=false;

while(reFile>>CarNum>>Pinpai>>Price>>Buytime>>Driver>>yidong>>Baofei)
{
if(strcmp(CarNum,Num)==0)
{
cout<<"您想删除的车辆档案信息如下:"<<endl<<endl;
cout<<"车牌号: "<<CarNum<<endl<<"车辆品牌:"<<Pinpai<<endl<<"车辆价格:"<<Price<<endl<<"购买时间:"
<<Buytime<<endl<<"驾驶员: "<<Driver<<endl<<"是否异动:"<<yidong<<endl<<"是否报废:"<<Baofei<<endl;

ofstream temFile1("TempFile1.txt");
if(!temFile1)
{
cerr<<"Error!Can not open the File!"<<endl;
exit(1);
}

temFile1<<CarNum<<"\n"<<Pinpai<<"\n"<<Price<<"\n"<<Buytime<<"\n"<<Driver<<"\n"<<Baofei<<"\n"<<yidong<<endl;
temFile1.close();

Delet=true;
break;

}

else
{
ofstream temFile2("TempFile2.txt");
if(!temFile2)
{
cerr<<"Error!Can not open the File!"<<endl;
exit(1);
}
temFile2<<CarNum<<"\n"<<Pinpai<<"\n"<<Price<<"\n"<<Buytime<<"\n"<<Driver<<"\n"<<Baofei<<"\n"<<yidong<<endl;
temFile2.close();
}
}
if(false==Delet) cout<<"Sorry!没有您所要删除的车辆的档案信息,请仔细核对!O(∩_∩)O谢谢!"<<endl;


reFile.close();

system( "del 车辆管理系统.txt "); //删除原始文件
system( "rename TempFile2.txt, 车辆管理系统.txt "); //修改文件名

cout<<"该车辆档案信息已经删除!"<<endl;
system("pause");
...全文
3715 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jpwangluo 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

C/C++ code

#include <iostream>
#include <vector.h>
#include <string.h>
#include <fstream>
using namespace std;


int main()
{
string from;
int count = 0;
int hang = 0;
cout<<"文件:";
……
[/Quote]
这是一种方法,还有没有其他的针对大文件的方法吗
otfychly881989 2009-06-16
  • 打赏
  • 举报
回复
谢谢5楼的哈!\(^o^)/~,我真不知道我在这里加一个break干什么,O(∩_∩)O谢谢所有的人!!解决了!!

这下我要去好好把容器和迭代器看看!!Thanks!!
tkminigame 2009-06-16
  • 打赏
  • 举报
回复
请问修改和删除文件内容的原理是什么?删掉老文件生成一个新文件?
otfychly881989 2009-06-16
  • 打赏
  • 举报
回复
有没有不用容器的方法啊??
pengzhixi 2009-06-16
  • 打赏
  • 举报
回复
按4楼的先读到 vector里面,删除后再写进去.
mstlq 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 otfychly881989 的回复:]
我输入111111的话,就删除不了,如果输入123456的话,就把123456后面的所有都删除了!!还有好像那个TempFile1.txt文件中始终没有内容啊!!
[/Quote]

“111111删除不了”,“如果输入123456的话,就把123456后面的所有都删除了”,这两点应该都是
Delet=true;
break;
这段代码里面的“break;”闹的,删掉break试试吧。

还有一个要注意的问题就是文件TempFile2.txt需要用追加方式打开,上面已经说了^_^
Walf_ghoul 2009-06-16
  • 打赏
  • 举报
回复 7

#include <iostream>
#include <vector.h>
#include <string.h>
#include <fstream>
using namespace std;


int main()
{
string from;
int count = 0;
int hang = 0;
cout<<"文件:";
cin>>from; //取得源文件名
ifstream is(from.c_str()); //输入流
istream_iterator<string>ii(is);
istream_iterator<string> eos;
vector<string>b (ii,eos); //将文件的内容存入容器中
vector<string>::iterator it; //使用迭代器
cout << "输入你想删除的内容:";
string str;
cin >> str;

for(it = b.begin() ; it<b.end();it++)
{
if(str == *it)
{
*it = ""; //如果找到要删除的内容,将对应的迭代器内容清空
}
}

ofstream wr(from.c_str(),ios::out);

for(it=b.begin() ; it<b.end();it++) //重新写回文件
{
wr << *it <<endl;
cout << *it<< endl;
}

return 0;
}



如果文件大的话,这样做效率并不高。
mstlq 2009-06-16
  • 打赏
  • 举报
回复

一开始的时候,最好建立一个空的TempFile2.txt
在bool Delet=false;后面加上
ofstream temFile2("TempFile2.txt");
temFile2.close();

后面的ofstream temFile2("TempFile2.txt");请改成
temFile2.open("TempFile2.txt",ios::app);
otfychly881989 2009-06-16
  • 打赏
  • 举报
回复
我输入111111的话,就删除不了,如果输入123456的话,就把123456后面的所有都删除了!!还有好像那个TempFile1.txt文件中始终没有内容啊!!
wxgiter 2009-06-16
  • 打赏
  • 举报
回复
哪里有问题呢?

65,183

社区成员

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

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