首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::ofstream追加文件

std::ofstream追加文件
EN

Stack Overflow用户
提问于 2017-03-19 00:25:38
回答 2查看 3.2K关注 0票数 2

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

代码语言:javascript
复制
  ofstream f("reservedTables.DAT");  
  cin >> table;
  f.open("reservedTables.DAT", ios::out | ios::app);
  f << table;
  f.close();

我做错了什么?我为变量table写了数字,但它没有出现在我放入的文件中

EN

回答 2

Stack Overflow用户

发布于 2017-03-19 00:33:24

快速浏览:

代码语言:javascript
复制
ofstream f("reservedTables.DAT");  

分配流并打开文件。

代码语言:javascript
复制
cin >> table;

读取来自用户的输入。

代码语言:javascript
复制
f.open("reservedTables.DAT", ios::out | ios::app);

尝试重新打开文件。都会失败。

代码语言:javascript
复制
f << table;

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

代码语言:javascript
复制
f.close();

关闭文件。

解决方案

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

代码语言:javascript
复制
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".
}
票数 4
EN

Stack Overflow用户

发布于 2017-03-19 00:31:21

这是因为您要打开该文件两次。

如果调用open,实际上就是在调用rdbuf()->open(filename, mode | ios_base::out)。请注意(ref):

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

因为返回了一个空指针,所以它被分配给内部文件缓冲区,并且不再打开任何文件。这意味着任何写入它的尝试都会失败。

如果您指定了文件名,则构造函数已经打开了该文件,因此您不需要调用open

代码语言:javascript
复制
std::ofstream f("reservedTables.DAT");  
std::cin >> table;
f << table;
f.close();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42876885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档