C++ 库研究笔记——Linux下创建文件夹

来源:互联网 发布:玻璃软件 编辑:程序博客网 时间:2024/06/05 03:58

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

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


#pragma once#include <iostream>#include <string>#include <sys/stat.h>#include <errno.h>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';}



原创粉丝点击