如何输出到子目录中的文件?

How do I output into a file in subdirectory?

这不是重复的。我正在尝试将一些输出打印到子目录中的文件(在本例中为文件 /stuff/output_1.txt),但它似乎没有创建任何新文件。代码执行但没有创建文件,也没有创建任何名为 /stuff 的子目录。这是我的代码:

#include <iostream>
#include <sstream>
#include <fstream>

using namespace std;

int main(void)
{
  int out = 1;
  stringstream fname;
  fstream f;
  fname << "./stuff/output" << "_" << out << ".txt";
  f.open(fname.str().c_str(), ios_base::out);
  f << "hello" << "\t";
  f << endl;
  f.close();
}

当我改为使用线路时

fname << "output" << "_" << out << ".txt";

它在当前目录中创建了一个名为 output_1.txt 的文件,因此其余代码可以正常工作。出了什么问题?

我在 macOS 上,所以“/”应该是正确的,而不是 Windows 上使用的“\”,不是吗?

no file is created, nor any subdirectory

您正在使用 fstream,它希望路径存在。如果您正在引用一个目录但它不存在,那么它将失败,因为您必须在 运行 您的程序之前创建目录,或者您必须使用 mkdir() 来创建它。

您可以通过 f.is_open() 检查您的流是否可以打开。

f.open(fname.str().c_str(), ios_base::out);
if (f.is_open())
{
    f << "hello" << "\t";
    f << endl;
    f.close();
}
else
    std::cerr << "Unable to open " << fname;

nor any subdirectory called ./stuff

为什么您希望 fstream 为您创建子目录?你必须自己做。在我的机器上测试它时我得到了相同的行为,简单的解决方案是做一个 mkdir stuff。之后,文件被正确创建。但我认为没有抛出运行时错误很奇怪。当子目录不存在时,fstream 只是静静地什么都不做是不好的(特别是对于初学者)。