在C++中不能直接修改文本文件的某一行,但是可以使用复制文件作为一个临时的文本,在复制过程中进行修改删除,然后再进行覆盖。
可以使用一个临时的txt文件,我这次主要想讲讲利用vector容器
**1、在类中定义一个vector容器
例如
vector<class Cplusplus> CPP;
2、打开文件
ifstream ifs;
ifs.open(CPP_FILE, ios::in);
3、清空容器,防止容器中有内容
CPP.clear();
4、依次将文件中的每一行读出压入容器
while (ifs >> s.id && ifs>>s.name && ifs>>s.Class && ifs>>s.m_grades && ifs>>s.m_scores && ifs>>s.cal)
{
if (_id != s.id)
{
CPP.push_back(s);
}
}
5、关闭文件
ifs.close();
6、再次打开文件,进行覆盖写入操作
ofstream ofs;
ofs.open(CPP_FILE, ios_base::out);
7、依次将容器中的内容写入txt文件
for (i=0;i<CPP.size();i++)
{
ofs << CPP[i].id <<" "<< CPP[i].name <<" "<< CPP[i].Class <<" "<< CPP[i].m_grades <<" "<< CPP[i].m_scores <<" "<< CPP[i].cal << endl;
}
8、关闭文件
ofs.close();**
下面展示一下完整的代码:
void Teacher::deleteData()
{
ifstream ifs;
ifs.open(CPP_FILE, ios::in);
int _id;
cout << "请输入你要删除学生的学号:" << endl;
cin >> _id;
CPP.clear();
Cplusplus s;
while (ifs >> s.id && ifs>>s.name && ifs>>s.Class && ifs>>s.m_grades && ifs>>s.m_scores && ifs>>s.cal)
{
if (_id != s.id)
{
CPP.push_back(s);
}
}
ifs.close();
ofstream ofs;
ofs.open(CPP_FILE, ios_base::out);
int i;
for (i=0;i<CPP.size();i++)
{
ofs << CPP[i].id <<" "<< CPP[i].name <<" "<< CPP[i].Class <<" "<< CPP[i].m_grades <<" "<< CPP[i].m_scores <<" "<< CPP[i].cal << endl;
}
ofs.close();
cout << "删除成功!" << endl;
system("pause");
system("cls");
}
刚开始学习C++,错误之处请指正。