现在的位置: 首页 > 综合 > 正文

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

2013年10月21日 ⁄ 综合 ⁄ 共 875字 ⁄ 字号 评论关闭

查了很多,都不怎么完成,后在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';
}

抱歉!评论已关闭.