PRA*_*RAS 0 c++ filesystems c++11
我最近开始使用 C++ 并在执行代码时必须创建目录时遇到了这种情况。当我必须创建单个文件夹时,代码工作正常,但是当我必须使用这个新创建的文件夹创建另一个文件夹时,它会失败。
假设,我在C:并希望将我的文件存储在C:/A/B/. 下面的代码中,mkdir()如果我必须将我的文件存储在其中C:/A/但在添加另一个文件夹时失败,则使用以下代码可以正常工作B。
以下是我的代码片段:
#include <sys/stat.h>
#include <string>
using namespace std;
int main()
{
string stringpath = "C:/A/B/";
int status = mkdir(stringpath.c_str(),0777);
if(status!=0)
{
//.....
}
else
{
//....
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我创建这个目录,我可以在父目录中拥有任意数量的文件夹吗?(PS:我已经添加了头文件sys/stat.h、iostream和string)
mkdir()仅创建指定路径的最后一个组件。在您的示例中,它将仅创建B. 如果任何父目录不存在(即,如果A不存在),则该函数将失败并显示ENOENT. 您需要分割路径并调用mkdir()路径中的每个中间目录,忽略EEXIST错误。
status = mkdir("C:/A/", 0777);\nif ((status < 0) && (errno != EEXIST)) ...\n\nstatus = mkdir("C:/A/B/", 0777);\nif ((status < 0) && (errno != EEXIST)) ...\nRun Code Online (Sandbox Code Playgroud)\n\n如果您不想手动处理此问题,请使用为您处理的包装器,例如 Boost 的create_directories()函数:
\n\n\n\n
bool create_directories(const path& p);
\nbool create_directories(const path& p, system::error_code& ec);\n\n
create_directory()作用:\xc2\xa0 通过调用\xc2\xa0 \xc2\xa0 为\xc2\xa0p\xc2\xa0 中任何不存在的元素建立后置条件。后置条件:\xc2\xa0
\n\nis_directory(p)如果创建了新目录,则返回:\xc2\xa0true\xc2\xa0,否则返回\xc2\xa0false。
\n\n抛出:\xc2\xa0如\xc2\xa0中指定的错误报告。
\n\n复杂度:\xc2\xa0
\nO(n+1)其中\xc2\xa0 \xc2\xa0 是\xc2\xa0 \xc2\xa0 中不存在的n元素的数量。p
这就是你在 C++17 中的做法:
#include <filesystem>
namespace fs = std::filesystem;
fs::create_directories("./a/b/c")
Run Code Online (Sandbox Code Playgroud)