在 C++ 中创建文件夹

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)

Rem*_*eau 5

mkdir()仅创建指定路径的最后一个组件。在您的示例中,它将仅创建B. 如果任何父目录不存在(即,如果A不存在),则该函数将失败并显示ENOENT. 您需要分割路径并调用mkdir()路径中的每个中间目录,忽略EEXIST错误。

\n\n
status = mkdir("C:/A/", 0777);\nif ((status < 0) && (errno != EEXIST)) ...\n\nstatus = mkdir("C:/A/B/", 0777);\nif ((status < 0) && (errno != EEXIST)) ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您不想手动处理此问题,请使用为您处理的包装器,例如 Boost 的create_directories()函数:

\n\n
\n

bool create_directories(const path& p);
\n bool create_directories(const path& p, system::error_code& ec);

\n\n

create_directory()作用:\xc2\xa0 通过调用\xc2\xa0 \xc2\xa0 为\xc2\xa0 p\xc2\xa0 中任何不存在的元素建立后置条件。

\n\n

后置条件:\xc2\xa0is_directory(p)

\n\n

如果创建了新目录,则返回:\xc2\xa0true\xc2\xa0,否则返回\xc2\xa0false。

\n\n

抛出:\xc2\xa0如\xc2\xa0中指定的错误报告。

\n\n

复杂度:\xc2\xa0O(n+1)其中\xc2\xa0 \xc2\xa0 是\xc2\xa0 \xc2\xa0 中不存在的n元素的数量。p

\n
\n


Ste*_*nko 5

这就是你在 C++17 中的做法:

#include <filesystem>
namespace fs = std::filesystem;
fs::create_directories("./a/b/c")
Run Code Online (Sandbox Code Playgroud)