如何创建目录c++;(使用_mkdir) 今天我在网上做了很多关于如何在C++上创建目录的研究。 找到了很多方法,有些比其他容易

如何创建目录c++;(使用_mkdir) 今天我在网上做了很多关于如何在C++上创建目录的研究。 找到了很多方法,有些比其他容易,c++,directory,mkdir,C++,Directory,Mkdir,我使用\u mkdir(“C:/Users/…”)尝试了\u mkdir函数以创建文件夹。请注意,函数的参数将转换为常量char* 到目前为止,还不错,但是当我想要更改路径时,它不起作用(请参阅下面的代码)。我有一个默认的字符串路径“E:/test/new”,我想创建10个子文件夹:new1,new2,newN,…,new10 为此,我将字符串与一个数字(用于-loop的计数器)连接起来,使用静态转换转换成char,然后使用c_str()转换字符串,并将其分配给一个常量char*变量 编译器编译

我使用
\u mkdir(“C:/Users/…”)尝试了
\u mkdir
函数以创建文件夹。请注意,函数的参数将转换为
常量char*

到目前为止,还不错,但是当我想要更改路径时,它不起作用(请参阅下面的代码)。我有一个默认的字符串路径
“E:/test/new”
,我想创建10个子文件夹:
new1
new2
newN
,…,
new10

为此,我将字符串与一个数字(用于
-loop的
计数器)连接起来,使用
静态转换转换成char,然后使用
c_str()
转换字符串,并将其分配给一个
常量char*
变量

编译器编译它没有问题,但它不工作。它打印10次“不可能创建文件夹n”。怎么了

使用
c_str()
将字符串转换为get a
const char*
?,可能是我犯了一个错误

还有,有没有其他方法可以创建文件夹?我查看了
CreateDirectory()(API),但它使用了像
DWORD HANDLE
这样的关键字,这对于一个没有高级水平的人来说有点难以理解(我不知道这些是什么意思)

#包括
#包括
#包括
使用名称空间std;
int main()
{
int stat;
字符串路径_s=“E:/test/new”;
对于(inti=1;i而言,问题在于
(path_s+static_cast(i+'0'))
创建了一个临时对象。其生命周期在调用
c_str()
之后结束(并被销毁)

这就给您留下了一个指向不再存在的字符串的指针,并且以几乎任何方式使用它都会导致未定义的行为

而是保存
std::string
对象,并在需要时调用
c_str()

std::string path = path_s + std::to_string(i);
_mkdir(path.c_str());

若您的编译器支持c++17,那个么您可以使用文件系统库来做您想要做的事情

#include <filesystem>
#include <string>
#include <iostream>

namespace fs = std::filesystem;

int main(){
    const std::string path = "E:/test/new";
    for(int i = 1; i <= 10; ++i){
        try{
            if(fs::create_directory(path + std::to_string(i)))
                std::cout << "Created a directory\n";
            else
                std::cerr << "Failed to create a directory\n";\
        }catch(const std::exception& e){
            std::cerr << e.what() << '\n';
        }
    }
    return 0;
}
#包括
#包括
#包括
名称空间fs=std::filesystem;
int main(){
const std::string path=“E:/test/new”;

对于(int i=1;i请注意,在Linux下,可以按如下方式使用mkdir命令:

#include <sys/stat.h>
... 
const int dir_err = mkdir("foo", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if (-1 == dir_err){
    printf("Error creating directory!n");
    exit(1);
}
#包括
... 
const int dir_err=mkdir(“foo”,S|u IRWXU | S|u IRWXG | S|u IROTH | S|IXOTH);
如果(-1==dir\u err){
printf(“创建目录时出错!n”);
出口(1);
}

有关它的更多信息可以通过阅读
man 2 mkdir

i+'0'
来收集。当
i==10
时,它将不能很好地工作。也许您应该改用它?而且它非常容易使用:将路径作为第一个参数传递,将空指针作为第二个参数。您可能对新的(C++17)感兴趣,您不会依赖它(非标准!)
mkdir
还有什么…是否存在“E:/test”呢?我很确定
\u mkdir
只会创建一级目录。
#include <sys/stat.h>
... 
const int dir_err = mkdir("foo", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if (-1 == dir_err){
    printf("Error creating directory!n");
    exit(1);
}