当变量是属性时,ofstream不起作用

时间:2016-10-19 15:06:54

标签: c++ ofstream

此流程的实施工作:

bool LinuxSysCall::addNewUser(std::string const &login, std::string const &password) {

    std::ofstream out;
    out.open(DATABASEPATH, std::ios::app);

    if (out.is_open())
    {
        std::string str = login + ":" + password + "\n";
        std::cout << "writing " << str << std::endl;
        out << str;
        return true;
    }
    return false;
}
//The new line is written in the file

但是当我将std::ofstream out作为LinuxSysCall的属性时,它不再起作用(没有任何例外):

bool LinuxSysCall::addNewUser(std::string const &login, std::string const &password) {
    this->out.open(DATABASEPATH, std::ios::app);

    if (this->out.is_open())
    {
        std::string str = login + ":" + password + "\n";
        std::cout << "writing " << str << std::endl;
        this->out << str;
        return true;
    }
    return false;
}
//The new line is not written in the file

为什么?

1 个答案:

答案 0 :(得分:2)

OperationQueue.main.addOperation{ <your segue or function call> } 的析构函数调用std::ofstream。这会将文本刷新到文件中。

如果你想使用一个成员变量(不是&#34;属性&#34;)你需要:

close

就目前而言,使用成员变量比使用本地变量更糟糕 - 但是,我怀疑你实际想要在许多成员函数中传递打开的文件。如果是这样,您可以使用以下命令刷新输出:

bool LinuxSysCall::addNewUser(std::string const &login, 
                              std::string const &password) {
    this->out.open(DATABASEPATH, std::ios::app);

    if (this->out.is_open())
    {
        std::string str = login + ":" + password + "\n";
        std::cout << "writing " << str << std::endl;
        this->out << str;
        this->out.close();
        return true;
    }
    return false;
}

没有关闭它。