为什么ofstream在这里工作,而不是fstream?

Why does ofstream work here, but not fstream?

我想了解 std::ofstreamstd::fstream 之间的区别。我有这个代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
    string line;
    //create an output stream to write to the file
    //append the new lines to the end of the file
    ofstream myfileI ("input.txt", ios::app);
    
    
    if (myfileI.is_open())
    {

        myfileI << "\nI am adding a line.\n";
        cout << myfileI.fail() << "\n";
        myfileI << "I am adding another line.\n";
        cout << myfileI.fail() << "\n";

        myfileI.close();
    }
    else cout << "Unable to open file for writing";

失败位return0,所以正在写入。

但是当我使用完全相同的代码但使用 fstream 而不是 ofstream.

时,失败位 return 1

input.txt就是这样:

Read and write to this file. 

What am I doing here?

This is not a good example of a file

我认为您描述的两种情况之间没有实际区别。

唯一的技术区别是ofstream始终启用ios::out标志,它将被添加到您指定的任何标志中。而 fstream 默认启用 ios::inios::out 标志 ,但会被您指定的任何标志覆盖。

因此,在 ofstream 情况下,您将以 ios::out | ios::app 模式打开文件,而在 fstream 情况下,您将仅以 ios::app 模式打开文件.

但是,对于 std::filebuf::open(),两个流都委托给 std::filebuf, and according to this referenceout|appapp 模式的行为完全相同 - 就好像 fopen(filename, "a")使用,因此如果文件存在,它们将“附加到文件”,如果文件不存在,它们将“创建新的”。