6

我正在查看 SO post C++ file stream open patterns ambiguity。我想知道fstream的默认文件打开方式。一个答案说,

上面的意思是下面的代码用完全相同的打开标志打开文件 fstream f("a.txt", ios_base::in | ios_base::out); ifstream g("a.txt", ios_base::out); ofstream h("a.txt", ios_base::in);

因此,如果我理解正确,如果我创建 fstream 的对象,我应该能够读取或写入。

但下面的代码不会将任何数据写入文件

fstream testFile1;
testFile1.open("text1.txt");
testFile1<<"Writing data to file";
testFile1.close();

但是,如下所示的添加模式会创建带有数据“将数据写入文件”的文本文件

testFile1.open("text1.txt", ios::out);

那么默认模式是否是实现定义的呢?我正在使用 TDM-GCC-64 工具链。

4

2 回答 2

4

s的默认模式std::fstreamstd::ios::in|std::ios::out. (来源

您的代码不打印任何内容的原因是,如果文件尚不存在test1.txt,则该std::ios::in|std::ios::out模式不会创建文件(来源:此页面上的表)。

您可以使用std::ios::in|std::ios::app从头开始读取,从结尾开始写入,如果文件不存在则创建文件的模式。请注意,使用模式,文件将在每次写入( Sourceapp )之前搜索到末尾。

于 2020-10-25T00:16:36.600 回答
2

默认模式ifstreamin. 默认模式ofstreamout. 这就是为什么它们以这种方式命名的原因。fstream没有默认模式。

您的示例仅显示了两个默认值,并且通过省略显式参数来表明这一点。fstream f("a.txt", ios_base::in | ios_base::out)使用两个显式参数正是因为没有默认模式。

于 2017-10-26T08:19:57.507 回答