在C++中创建文件夹 我最近开始在C++中工作,遇到了这种情况,我必须在执行代码时创建一个目录。当我必须创建一个文件夹时,代码运行良好,但当我必须使用新创建的文件夹创建另一个文件夹时,代码运行失败

在C++中创建文件夹 我最近开始在C++中工作,遇到了这种情况,我必须在执行代码时创建一个目录。当我必须创建一个文件夹时,代码运行良好,但当我必须使用新创建的文件夹创建另一个文件夹时,代码运行失败,c++,c++11,filesystems,C++,C++11,Filesystems,假设我在C:中,希望将文件存储在C:/A/B/中。如果必须将文件存储在C:/A/中,则使用mkdir的以下代码可以正常工作,但在添加另一个文件夹B时失败 以下是我的代码片段: #include <sys/stat.h> #include <string> using namespace std; int main() { string stringpath = "C:/A/B/"; int status = mkdir(stringpath.c_str

假设我在C:中,希望将文件存储在C:/A/B/中。如果必须将文件存储在C:/A/中,则使用mkdir的以下代码可以正常工作,但在添加另一个文件夹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
    {
        //....
    }
}

有人能帮我创建这个目录吗?我可以在父目录中有任意数量的文件夹?注意:我已经添加了头文件sys/stat.h、iostream和string

您可以调用以下文件:

string stringpath = "C:/A/B/";
int status = mkdir(stringpath.c_str(),0777);
string stringpath = "C:/A/";
int status = mkdir(stringpath.c_str(),0777);
stringpath = "C:/A/B/";
int status = mkdir(stringpath.c_str(),0777);
如果 C:/A/目录已存在。如果不存在,则执行以下操作:

string stringpath = "C:/A/B/";
int status = mkdir(stringpath.c_str(),0777);
string stringpath = "C:/A/";
int status = mkdir(stringpath.c_str(),0777);
stringpath = "C:/A/B/";
int status = mkdir(stringpath.c_str(),0777);
mkdir只创建指定路径的最后一个组件。在您的示例中,它将只创建B。如果任何父目录不存在,即,如果A不存在,则函数将使用eNONT失败。您需要拆分该路径并为该路径中的每个中间目录调用mkdir,同时忽略EEXIST错误

status = mkdir("C:/A/", 0777);
if ((status < 0) && (errno != EEXIST)) ...

status = mkdir("C:/A/B/", 0777);
if ((status < 0) && (errno != EEXIST)) ...
如果您不想手动处理此问题,请使用为您处理此问题的包装器,例如Boost的函数:

bool create_directories约束路径&p; bool create_directories约束路径&p,系统::错误代码&ec

效果:通过为不存在的p元素调用create_目录来建立后置条件

后置条件:是董事会吗

返回:如果创建了新目录,则返回true,否则返回false

抛出:在错误报告中指定

复杂性:在+1上,其中n是p中不存在的元素数


在C++11中,您可以使用以下实验函数:

#include <experimental/filesystem>
...
std::stringstream bufH;
bufH << dirName << fName;
if (!std::experimental::filesystem::exists(bufH.str()))
{
 std::experimental::filesystem::create_directories(bufH.str());
}

这是在C++17中执行此操作的方式:

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

标准C++11不知道文件夹的正确名称是目录;文件夹只是一个GUI人工制品,所以您的问题是特定于操作系统的mkdir不是C++11的一部分。这是特定于操作系统的Apise and read,以了解有关C++11的更多信息。您将看到这里没有提到文件夹或目录。在POSIX中。Windows有&在C++17中,您以前有过boost的版本。