非常に単純なファイル データベースを実装しています。私は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 があります。
OK - 問題は次のとおりです。
私が次のようなことをした場合:
db->Insert("a");
db->SelectAll();
db->Insert("b");
最終的に、ファイルには「a」のみが含まれます。なぜ?
注: getline() は失敗ビットを設定するようです。しかし、なぜ?