为什么ofstream在这里工作,而不是fstream?
Why does ofstream work here, but not fstream?
我想了解 std::ofstream
和 std::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::in
和 ios::out
标志 ,但会被您指定的任何标志覆盖。
因此,在 ofstream
情况下,您将以 ios::out | ios::app
模式打开文件,而在 fstream
情况下,您将仅以 ios::app
模式打开文件.
但是,对于 std::filebuf::open()
,两个流都委托给 std::filebuf
, and according to this reference,out|app
和 app
模式的行为完全相同 - 就好像 fopen(filename, "a")
使用,因此如果文件存在,它们将“附加到文件”,如果文件不存在,它们将“创建新的”。
我想了解 std::ofstream
和 std::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
.
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::in
和 ios::out
标志 ,但会被您指定的任何标志覆盖。
因此,在 ofstream
情况下,您将以 ios::out | ios::app
模式打开文件,而在 fstream
情况下,您将仅以 ios::app
模式打开文件.
但是,对于 std::filebuf::open()
,两个流都委托给 std::filebuf
, and according to this reference,out|app
和 app
模式的行为完全相同 - 就好像 fopen(filename, "a")
使用,因此如果文件存在,它们将“附加到文件”,如果文件不存在,它们将“创建新的”。