std::ofstream 追加文件

std::ofstream appending files

本文关键字:文件 追加 ofstream std      更新时间:2023-10-16

所以我想在文件中输入一些东西,但它似乎不起作用。我的代码是这样的:

  ofstream f("reservedTables.DAT");  
  cin >> table;
  f.open("reservedTables.DAT", ios::out | ios::app);
  f << table;
  f.close();

我做错了什么?我为变量写了数字table但它没有出现在我把它放在

ofstream f("reservedTables.DAT");

分配流并打开文件。

cin >> table;

读取来自用户的输入。

f.open("reservedTables.DAT", ios::out | ios::app);

尝试重新打开文件。将失败。

f << table;

打开失败后流处于失败状态,无法写入。

f.close();

关闭文件。

溶液

仅打开文件一次并检查错误。

ofstream f("reservedTables.DAT", ios::app); // no need for ios::out. 
                                            // Implied by o in ofstream  
cin >> table;
if (f.is_open()) // make sure file opened before writing
{
    if (!f << table) // make sure file wrote
    {
        std::cerr << "Oh snap. Failed write".
    }
    f.close(); // may not be needed. f will automatically close when it 
               // goes out of scope
}
else
{
    std::cerr << "Oh snap. Failed open".
}
那是

因为您要打开文件两次。

如果你打电话给open,你实际上是在打电话给rdbuf()->open(filename, mode | ios_base::out)。请注意(参考(:

如果关联的文件已打开,则立即返回空指针。

由于返回了 null 指针,因此会将其分配给内部文件缓冲区,并且不再打开任何文件。这意味着任何写入它的尝试都会失败。

如果指定文件名,构造函数已打开文件,因此无需调用 open

std::ofstream f("reservedTables.DAT");  
std::cin >> table;
f << table;
f.close();