我正在实现一个非常简单的文件数据库。我有2个基本操作:
void Insert(const std::string & i_record)
{
//create or append to the file
m_fileStream.open(m_fileName.c_str(), std::ios::out | std::ios::app);
if (m_fileStream.is_open())
{
m_fileStream << i_record << "\n";
}
m_fileStream.flush();
m_fileStream.close();
}
/*
* Returns a list with all the items in the file.
*/
std::vector<std::string> SelectAll()
{
std::vector<std::string> results;
m_fileStream.open(m_fileName.c_str(), std::ios::in);
std::string line;
if (m_fileStream.is_open())
{
while (!m_fileStream.eof())
{
getline (m_fileStream, line);
results.push_back(line);
}
}
m_fileStream.close();
return results;
}
该类将 m_fileStream 和 m_fileName 作为私有成员。
好的 - 这是问题所在:
如果我这样做:
db->Insert("a");
db->SelectAll();
db->Insert("b");
最终结果是文件将只包含“a”;为什么?
注意:似乎 getline() 将设置失败位。但为什么?