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).
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).