功能描述:当目录不存在时创建目录,目录存在时则不做任何操作,可创建多级目录
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;
}