如何创建目录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 aconst 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);
}