如何使用C ++创建一个没有路径名称,只有要创建的文件夹名称的文件夹?

4
可能是重复的问题:
在C或C++中创建目录 我想创建一个名为“BobtheBuilder”的文件夹,并在其中创建一个文本文件。我不想知道我的路径,也不想手动输入路径:
ofstream out("C:/MyComputer/User/Jeff/etc/BobtheBuilder/NewFile.txt");

我希望它只在我的可执行文件所在的区域本地化,像这样:
ofstream out("/BobtheBuilder/NewFile.txt");

这是可能的吗?我必须知道整个路径才能进行文件管理吗?我感觉这是可能的,因为你可以创建或打开与程序在同一目录中的文件,例如:

ifstream inf("NewFile.txt");

或者有一种特殊的关键字可以像这样填充之前的路径吗:
ifstream inf("FILLIN/BobtheBuilder/NewFile.txt");

谢谢


3
我认为特殊关键词应该是“.”,它指向你的工作目录。 - shilk
2个回答

3
你可以绝对指定一个相对路径,例如 "BobtheBuilder/NewFile.txt" 而不需要指定完整路径。 但在创建文件之前,你需要先创建文件夹。 由于创建文件夹是平台特定的,而你使用的是Windows系统,你需要调用 CreateDirectory 函数并将 "BobtheBuilder" 作为它的参数。 该文件夹将被创建在程序的默认工作目录中,即可执行文件所在的文件夹。 你可以在创建文件夹和文件之前使用 SetCurrentDirectory 函数来更改这个工作目录。

0

要创建一个目录,您可以使用C函数:

int mkdir(const char *pathname, mode_t mode);

如果您可以使用Boost,那么它真的变得更加容易且更符合C++标准。
bool create_directories(const path& p);

// usage example
boost::filesystem::create_directories("./BobtheBuilder");

正如你在问题中提到的,你可以使用绝对路径和相对路径。这取决于你的意图。在你的情况下,你可以这样做:

boost::filesystem::create_directories("./BobtheBuilder");
ofstream out("./BobtheBuilder/NewFile.txt");

不需要完全指定路径。
如果您经常需要管理路径,则 Boost 提供了许多有用的路径管理工具。例如,考虑您在问题中提到的问题:您想获取当前目录的完整路径,然后附加一个相对路径。您可以非常容易地做到这一点:
 #include <boost/filesystem.hpp>
 namespace fs = boost::filesystem;
 ...
 fs::path curr_abs_path = fs::current_path();
 fs::path rel_path = "foo/bar";
 fs::path combined = (curr_abs_path /= rel_path);
 cout << combined << endl;

假设当前目录为 /tmp/,上述代码片段将打印:
/tmp/foo/bar operator/= 负责追加两个路径并返回组合结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接