美文网首页
linux mkdir函数创建多层文件夹

linux mkdir函数创建多层文件夹

作者: 伪乐观的W先生 | 来源:发表于2019-01-03 20:46 被阅读0次
    int mkdirMulti(const char* path) {
        if(!path) {
            printf("path is NULL!!!\n");
            return -1;
        }
        if(access(path, F_OK) == 0) {
            return 0;
        }
        std::string directory;
        const char* currentDir = strrchr(path, '/');
        if(currentDir) {
            //走到这里说明传进来的path是不存在的,我们要获取上一层的目录,再做同样的判断
            directory = std::string(path, currentDir-path);
            int ret = mkdirMulti(directory.c_str());
            if(ret == 0) {
                //此处if判断是为了"xxx/xxx/"这种格式的路径做处理的,
                //因为"xxx/xxx/"和"xxx/xxx"对于我们代码来说是两种路径,但其实是同一个路径,mkdir会因为递归调用,
                //分别将两者用mkdir创建一次,第二次的创建会因为第一次已经创建了,导致失败, 就会返回一个-1,但其实第一次已经成功了。
                if((access(path, F_OK) == 0)) {
                    return 0;
                } else {
                    int mkdir_ret = mkdir(path, S_IRWXU);
                    return mkdir_ret;
                }
            } else {
                //情况1:最上层的"/xxx"也不存在的时候,directory会是空的,所以递归mkdirMulti的时候会走到判空中,返回-1,这个时候应该去创建目录一下
                //情况2:mkdirMulti递归创建失败,这种情况比较少,比如没有权限,mkdir失败
                int mkdir_ret = mkdir(path, S_IRWXU);
                return mkdir_ret;
            }
        } else {
            //这种是针对直接传"xxx/xxx"的路径
            int mkdir_ret = mkdir(path, S_IRWXU);
            return mkdir_ret;
        }
    }
    

    相关文章

      网友评论

          本文标题:linux mkdir函数创建多层文件夹

          本文链接:https://www.haomeiwen.com/subject/megqrqtx.html