连续奋战了三天,终于提交了一个小的项目通过了~也算明白了之前的一句话:老板要的是结果,不是过程。一句话,我明天要结果,我就得屁颠屁颠的赶出来。不光是写代码,还得用Qt做出界面来,UI设计本身就不是我这种粗人的擅长,真心纠结。好了,废话不多说了,返回主题。
记得bash下mkdir -p命令可以递归创建目录,但是近期使用系统调用mkdir函数时才发现无法递归创建目录,而且这个函数也只有两个参数,一个是path,另一个是mode,无法指定其他参数。于是乎只能自己编写mkdirs来创建多级目录。代码比较挫,大半夜写的,思路也不清晰,勉强能用。
~~~~
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#define BUFLEN 255
/**
*@function mkdirs : create dir recursion
*/
int mkdirs(const char *path,mode_t mode)
{
if(path==NULL)
{
#ifdef __DEBUG__
fprintf(stderr,"[%s:%d]path is NULL pointer!\n",
__FILE__,__LINE__);
#endif
return -1;
}
char DirName[BUFLEN];
strcpy(DirName,path);
int i,len;
if((len = strlen(DirName))==0 )
{
#ifdef __DEBUG__
fprintf(stderr,"[%s:%d]strlen(DirName) is 0\n",
__FILE__,__LINE__);
#endif
return -1;
}
if(DirName[len-1]!='/')
strcat(DirName,"/");
len = strlen(DirName);
for(i=1;i<len;i++)
{
if(DirName[i] == '/')
{
DirName[i] = 0;
if(access(DirName,F_OK)!=0)
{
if(mkdir(DirName,mode) < 0)
{
#ifdef __DEBUG__
fprintf(stderr,"[%s:%d]mkdir %s error! : %s\n",
__FILE__,__LINE__,DirName,strerror(errno));
#endif
return -1;
}
}
DirName[i] = '/';
}
}
return 0;
}
上面用的遍历字符串数组,当然也可以调用strchr函数返回目录'/'的指针来进行遍历,有点手懒就不重写了。
看了D大写的代码优化的问题,想了很多,下午老板也说了,抽时间把代码优化一下……好吧,优化代码的事情在我看来还是很美妙的一件事情。加油了……
Linux平台mkdir函数创建多级目录