linux下逐级创建目录

功能描述:当目录不存在时创建目录,目录存在时则不做任何操作,可创建多级目录

s32 create_directory (const s8 *dir_path)
{	
    char dir_name[FILE_PATH_MAX_SIZE + 1];      /*为可能添加的/预留空间*/
    int ret = 0;    
    int i = 0, dir_name_len = 0;    
    s32 opreate_result = OPERATE_SUCCESS;

	if (NULL == dir_path || "" == dir_path || " " == dir_path)
	{
		DEBUG_PRINT ("FILE PATH ERROR!"); 
        opreate_result = OPERATE_FAIL;
        goto lable_ret;  
	}
    /* 复制目录路径 */
    ret = snprintf (dir_name, sizeof (dir_name), "%s", dir_path);   
    if (0 > ret)    
    {       
        DEBUG_PRINT ("joint error! dir_name=%s\n", dir_name); 
        opreate_result = OPERATE_FAIL;
        goto lable_ret;  
    }       

    /* 在结尾加上'/',便于后面的统一处理 */
    dir_name_len = strlen (dir_name);    
    if ('/' != dir_name[dir_name_len - 1])   
    {       
        strncat (dir_name, "/", sizeof(dir_name) - strlen("/") - 1); 
    }   
    dir_name_len++;  

    /* 处理以"//...开头的情况"(ps:linux文件的路径可以双斜杠来区别目录间的间隔) */
    i = 0;
    while ('/' == dir_name[i] && i < dir_name_len)
    {
        i++;
    }

    /* 逐级生成目录 */
    for (; i < dir_name_len; i++) 
    {       
        if ('/' == dir_name[i])     
        {           
            dir_name[i] = '\0';         
            if (0 != access (dir_name, F_OK))   /* 判断目录是否已经存在,不存在再创建 */            
            {               
                if (-1 == mkdir (dir_name, 0755))               
                {                   
                    DEBUG_PRINT ("[ERROR when mkdir] %s dir_name=%s\n", strerror (errno), dir_name);   
                    opreate_result = OPERATE_FAIL;
                    goto lable_ret;              
                }           
            }                       
            dir_name[i] = '/';      
        }   
    }   

lable_ret:
    return opreate_result;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值