菜鸟笔记
提升您的技术认知

linux下创建文件夹-ag真人游戏

查了很多,都不怎么完成,后在stackoverflow 上了一个失推荐不多的方案,发现是最有效的。

如创建 “ab/b/c” 这个文件夹,其中,ab文件夹不要求事先不存在(若不存在,先创建)

#pragma once
#include 
#include 
#include 
#include 
namespace light
{
int mkpath(std::string s,mode_t mode=0755)
{
    size_t pre=0,pos;
    std::string dir;
    int mdret;
    if(s[s.size()-1]!='/'){
        // force trailing / so we can handle everything in loop
        s ='/';
    }
    while((pos=s.find_first_of('/',pre))!=std::string::npos){
        dir=s.substr(0,pos  );
        pre=pos;
        if(dir.size()==0) continue; // if leading / first time is 0 length
        if((mdret=::mkdir(dir.c_str(),mode)) && errno!=eexist){
            return mdret;
        }
    }
    return mdret;
}
/*
 * 注:使用时,light::mkdir, 易与::mkdir 混淆,固去掉了
int mkdir(std::string s,mode_t mode)
{
    light::mkpath(s, mode);
}
*/
}

测试代码:

#include "mkpath.h"
int main()
{
    int mkdirretval;
    //mkdirretval=light::mkpath("foo2/bar",0755);
    //mkdirretval=light::mkpath("./lsl/foo2/bar");
    mkdirretval=light::mkpath("lsl/foo2/bar");
    std::cout << mkdirretval << '\n';
}

有评论:
unix 的话,下面一个语句不就足够了吗?
system(“mkdir -p \”lsl/foo2/bar\”“);

linux 下 mkdir 循环创建目录
头文件库:   

#include   
#include    
函数原型:   int mkdir(const char *pathname, mode_t mode);   
函数说明:   mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。   
返回值:   若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。   
mode方式:   
s_irwxu 00700权限,代表该文件所有者拥有读,写和执行操作的权限 
s_irusr(s_iread) 00400权限,代表该文件所有者拥有可读的权限 
s_iwusr(s_iwrite) 00200权限,代表该文件所有者拥有可写的权限 
s_ixusr(s_iexec) 00100权限,代表该文件所有者拥有执行的权限 
s_irwxg 00070权限,代表该文件用户组拥有读,写和执行操作的权限 
s_irgrp 00040权限,代表该文件用户组拥有可读的权限 
s_iwgrp 00020权限,代表该文件用户组拥有可写的权限 
s_ixgrp 00010权限,代表该文件用户组拥有执行的权限 
s_irwxo 00007权限,代表其他用户拥有读,写和执行操作的权限 
s_iroth 00004权限,代表其他用户拥有可读的权限 
s_iwoth 00002权限,代表其他用户拥有可写的权限 
s_ixoth 00001权限,代表其他用户拥有执行的权限

example:

   int iscreate = mkdir(path,s_irusr | s_iwusr | s_ixusr | s_irwxg | s_irwxo);
   if( !iscreate )
   printf("create path:%s\n",path);
   else
   printf("create path failed! error code : %s \n",iscreate,path);
网站地图