此流程的实施工作:
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
为什么?
答案 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;
}
没有关闭它。