C++ 中执行 "mkdir -p" 的现代方式是什么?

What is a modern way in C++ to execute "mkdir -p"?

C++17 标准引入了<filesystem> 库,它提供了一些工具来对文件系统、路径、文件和目录执行操作。为了创建一个新目录,可以使用 create_directory.

但是,如果父目录不存在,此函数将失败,因为它等同于没有标志的 UNIX mkdir。除了给定的参数之外,是否要创建所有父目录,使用标志 -p 运行 mkdir。但是函数是 C++17 不提供添加标志的选项。

有没有另一种方法可以用 C++ 风格同时创建整个目录集?

<cstdlib>的帮助下有一个C风格的选项:

std::system("mkdir -p NEW_DIRECTORY")

但是,如果 NEW_DIRECTORY 被提供为 string,则之前必须执行以下操作:

std::string mkdir_s = "mkdir -p "s + NEW_DIRECTORY;                                     
std::system(mkdir_s.c_str());

你想要的是 std::filesystem::create_directories 这将

Executes (1)[create_directory] for every element of p that does not already exist. If p already exists, the function does nothing (this condition is not treated as an error).