将字符串添加到文件而不覆盖以前的字符串

时间:2013-11-18 17:19:30

标签: c++ string file

我有两个问题。我正在研究基于文件的问题。

这是我的第一个程序。

    ofstream outRegister( "account.dat", ios::out );
    if ( !outRegister    ) {
    cerr << "File could not be opened" << endl;
    exit( 1 );}
    cout<<"enter your username :";
    cin>>a;
    cout<<"enter your password :";
    cin>>b;
    outRegister<<a<<' '<<b;
    cout<<"your account has been created";

每次运行此代码时,我的程序都会从​​用户获取数据并存储在“account.dat”文件中,但会覆盖以前的数据。如何编写我的程序以在下一行编写它们?

我的第二个问题是,

每当我需要登录时,我都需要我的程序来搜索用户从“account.dat”文件中提供的特定用户名和密码。如果匹配则应该允许访问。

ifstream inRegister( "account.dat", ios::in );
if ( !inRegister     ) {
cerr << "File could not be opened" << endl;
exit( 1 );
}
string a,a1,b,b1;

cout<<"\nyou are a premium user\n\n"<<endl;
cout<<"\n enter your user name:\t";
cin>>a;

while(getline(inRegister,a1))
{
if(a1==a)
{
    cout<<"\n enter your password: \t";
    cin>>b;
    inRegister>>b1;
    if(b1==b)
    {
        cout<<"\n access granted logging in....\n\n";
        Allowaccess();
    }
    else
    {
        cout<<"\n you have entered a wrong password";
    }
}
else
    cout<<"\n no such user name is found";
}

我的第二个编码是否正确?如果没有,任何人都可以指导我如何正确使用getline功能吗?

3 个答案:

答案 0 :(得分:2)

尝试使用追加文件模式app,其行为记录为

  

所有输出操作都发生在文件的末尾,附加到文件的末尾   现有内容。

ofstream outRegister("account.dat", ios::app);

对于第二个问题,请尝试使用ifstreamgetline逐行处理文件,检查该行中的第一个字是否与您的目标用户名匹配。

如果您遇到问题,请自行尝试第二部分并发布一个问题,包括您的代码。

答案 1 :(得分:1)

尝试使用追加文件模式应用,其行为记录为

所有输出操作都发生在文件末尾,附加到其现有内容。

ofstream outRegister("account.dat", ios::app);

答案 2 :(得分:0)

你可以使用:

std::ofstream outRegister("account.dat", std::ios_base::app | std::ios_base::out);


 if ( !outRegister    ) {
    cerr << "File could not be opened" << endl;
    exit( 1 );}
    cout<<"enter your username :";
    cin>>a;
    cout<<"enter your password :";
    cin>>b;
    outRegister<<a<<' '<<b;
    cout<<"your account has been created";

这段代码可以正常工作。因为您要以追加模式打开文件(ios_base::app) 实际上std::ofstream构造函数的原型是(string, std::ios_base::openmode