【问题标题】:Problems creating new text file C++创建新文本文件 C++ 的问题
【发布时间】:2014-04-21 20:08:31
【问题描述】:

我似乎在尝试完成我的 C++ 程序时遇到了一些问题,希望得到一些帮助。

在我的程序结束时,我也需要将它输出到文本文件。我尝试了使用 fstream 和 ofstream 的各种方法来检查文件是否存在,如果存在,则创建一个新文件,尽管我没有运气。

这是我目前所在的位置,但如果“output.txt”存在,那么它只会删除其中的内容并且不会创建任何内容,但不会崩溃。

...
ofstream output;
int fileIncrement = 0;
bool validFile = false;

cout << "Saving File.." << endl;
output.open("output.txt");

while (!validFile)
{
    if (output.good()) //  does exist
    {
        fileIncrement++;
        output.open(to_string(fileIncrement) + "output.txt");
    }
    else
    {
        myVectors.outputVectors(output);
        validFile = true;
    }
}

谢谢。

【问题讨论】:

  • 因为如果打开输出文件(good 返回 true),第一个条件 - if(output.good()) - 始终为 true,而 validFile 永远不会设置为 true
  • 它确实完成了。而且我认为 output.open(to_string(fileIncrement + "output.txt"); 会更改打开的文件,从而创建一个新文件?...它确实做到了并完成了,所以它不能被卡住循环
  • 启动调试器并单步执行代码。
  • 我已经完成了。一切顺利,这就是我如此困惑的原因。之后我检查文件,如果“output.txt”已经存在,那么它只是删除它的内容,但从不创建一个“1output.txt”,就像它应该归结为逻辑
  • 我添加了 output.close();下validFile = true;还是没有运气

标签: c++ file text-files output fstream


【解决方案1】:

output.good() 只是检查文件的可访问性。如果它还没有,它将被创建。因此 Captian Oblivious 评论说 validFile 永远不会被设置为 true。函数结束的原因实际上是因为您在打开第二个文件之前忘记关闭第一个文件(see here)。该操作失败,设置故障位。这就是为什么您的新文件永远不会创建,并且您以前的文件会被覆盖的原因。

我不确定在 C++ 中检查文件(预先)存在的好方法,但 this 听起来像您可能想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2019-04-20
    • 2023-03-13
    相关资源
    最近更新 更多