我一直试图想出一个代码来删除保存在文本文件中的数据,但无济于事。该怎么做?在c ++中,这是我的代码,我如何改进它,以便删除保存的数据可能是条目输入?
#include<iostream>
#include<string>
#include<fstream>
#include<limits>
#include<conio.h>
using namespace std;
int main()
{
ofstream wysla;
wysla.open("wysla.txt", ios::app);
int kaput;
string s1,s2;
cout<<"Please select from the List below"<<endl;
cout<<"1.New entry"<<endl;
cout<<"2.View Previous Entries"<<endl;
cout<<"3.Delete an entry"<<endl;
cin>>kaput;
switch (kaput)
{
case 1:
cout<<"Dear diary,"<<endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
getline(cin,s1);
wysla<<s1;
wysla.close();
break;
}
return 0;
}
答案 0 :(得分:0)
我可以用最快的方式为你提供同样的目的。使用功能http://www.cplusplus.com/reference/cstdio/fseek转到确切位置。假设您将名称保存在文件中。然后名单将是
Alex
Timo
Vina
删除Alex
时,请插入额外的字符前缀,以便将其标记为已删除
-Alex
Timo
Vina
必要时不会显示。
如果您不想这样做,则必须在没有该特定行的情况下进行复制。请参阅Replace a line in text file的帮助。在你的情况下,你用空字符串替换。
答案 1 :(得分:0)
在矢量的帮助下完成。
//Load file to a vector:
string line;
vector<string> mytext;
ifstream infile("wysla.txt");
if (infile.is_open())
{
while ( infile.good() )
{
getline (infile,line);
mytext.push_back(line);
}
infile.close();
}
else exit(-1);
//Manipulate the vector. E.g. erase the 6th element:
mytext.erase(mytext.begin()+5);
//Save the vector to the file again:
ofstream myfile;
myfile.open ("wysla.txt");
for (int i=0;i<mytext.size();i++)
myfile << mytext[i];
myfile.close();