【问题标题】:file.open not creating a new file in C++file.open 不在 C++ 中创建新文件
【发布时间】:2020-07-04 19:31:11
【问题描述】:

我正在尝试运行以下代码,但它既没有显示路径上的任何文件,也没有从中读取任何内容。无论我通过“cin >>”写入文件,它都没有被写入。谁能告诉我下面代码中的错误:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    char string[80];

    cout << "Enter Input" << endl;
    cin >> string;

    int len = strlen(string);

    fstream file;
    file.open("TEXT", ios::in | ios::out);

    for (int i = 0; i < len; i++)
        file.put(string[i]);

    file.close();
    file.open("TEXT", ios::in | ios::out);

    file.seekg(0);

    cout << "Output" << endl;
    while (file) {
        char ch;
        file.get(ch);
        cout << ch;
    }

    file.close();
    return 0;

}

【问题讨论】:

  • 您有任何错误吗?你能写字符串吗?您是否尝试过使用调试器单步执行?
  • 如果文件不存在,file.open("TEXT", ios::in | ios::out); 会失败。我不禁注意到您的程序没有进行任何错误处理。

标签: c++ filestream


【解决方案1】:

您应该在公开呼叫中添加fstream::app 标志,这样就可以解决问题!

【讨论】:

  • 感谢 cocool97。它通过在打开文件期间添加 ios::app 来工作。但为什么会这样呢?在附加模式下打开文件在这里工作。但我并没有在这里添加任何东西。那为什么还要加呢?
  • 好吧,您也没有输入任何内容,但您显然很乐意使用ios::in。然后,当您输入内容时,您使用ios::out。就像我说的,在我的回答中不要使用你并不真正需要的文件模式。但是我在回答中给出的链接解释了ios::in | ios::outios::in | ios::out | ios::app 之间的区别。
【解决方案2】:

不要乱用你不需要(或理解)的文件模式。先打开文件只写,然后再打开只读。使用不同的流进行读取和写入。

ofstream file_out;
file_out.open("TEXT");
for (int i = 0; i < len; i++)
    file_out.put(string[i]);
file_out.close();

ifstream file_in;
file_in.open("TEXT");
cout << "Output" << endl;
while (file_in) {
    char ch;
    file_in.get(ch);
    cout << ch;
}

除非您真正了解有关ios::inios::out 的规则,否则在需要输入时使用ifstream 并在需要输出时使用ofstream 会更安全。

如果您确实想了解规则,请更多reading

【讨论】:

  • 谢谢约翰。是的,它通过制作单独的 ifstream 和 ofstream 对象来工作。但是 fstream 是他们两个的通用类,所以我无法理解为什么它不起作用。
  • 因为就像 Igor 上面解释的(并在我链接到的页面上解释)ios::in | ios::out 不会创建不存在的文件。
  • 如果你只想使用一个流对象,那么至少只使用你需要的模式。 ios::in 用于阅读,ios::out 用于写作。
猜你喜欢
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 2012-11-03
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多