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");

谢谢

4

2 回答 2

3

您完全可以指定一个相对路径,例如“BobtheBuilder/NewFile.txt”,而无需指定整个路径。但是,您需要先创建文件夹,然后再创建文件。由于创建文件夹是特定于平台的,而且您使用的是 Windows,因此您需要调用CreateDirectory函数,并将“BobtheBuilder”作为其参数。然后将在程序的默认工作目录中创建该文件夹,该目录与可执行文件所在的文件夹相同。您可以在创建文件夹和文件之前使用SetCurrentDirectory函数更改此工作目录。

于 2012-05-27T07:30:05.500 回答
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/=负责追加两条路径并返回组合结果。

于 2012-05-27T09:40:29.000 回答