我想创建一个名为“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");
由于
答案 0 :(得分:3)
您可以绝对指定相对路径,例如“BobtheBuilder / NewFile.txt”,而无需指定整个路径。 但是,您需要先在文件之前创建文件夹。 由于创建文件夹是特定于平台的,因为您使用的是Windows,因此需要使用“BobtheBuilder”作为参数调用 CreateDirectory 函数。 然后,该文件夹将在程序的默认工作目录中创建,该目录与可执行文件所在的文件夹相同。 在创建文件夹和文件之前,您可以使用 SetCurrentDirectory 功能更改此工作目录。
答案 1 :(得分: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 /富/酒吧
operator/=
负责追加两条路径并返回合并后的结果。