该子函数实现创建一个子文件夹的功能。
调用该函数的时候参数为要创建的文件夹的路径和名字,比如要创建的目标文件夹为:E:\\test\\
则调用该函数的时候可以这样写:char* outDir="E:\\test\\";
recursive_mkdir(outDir);
函数recursive_mkdi:
int recursive_mkdir( char *dir )
{//分解路径名E:\\AA\\BB\\CC\\
//
std::string str = dir;
int index = 0;
int i = 0;
while(1)
{
std::string::size_type pos = str.find("\\",index); //返回的参数是查找到的该字符的位置,若没有则返回-1
std::string str1;
str1 = str.substr(0,pos); //函数substr是从字符串中提取子字符串
if( pos != -1 && i > 0 )
{
if (_access(str1.c_str(),0)==-1)
{
_mkdir(str1.c_str()); //若不存在该文件夹str1.c_str(),就创建一个
}
}
if( pos==-1 )
{
break;
}
i ++;
index = pos+1;
}
return 0;
}
重点函数详解:
注意这里将str=outDir是一个字符串,char* outDir="E:\\test\\";
str.find("\\",index)在字符串函数中find函数就是要实现在字符串中寻找某个字符,若是找不到该字符就会返回一个特殊值为npos,npos被赋值为-1。所以这句话的意思是要从str中找到这个字符“\\”,第一个参数就是要寻找的字符,第二个参数是从什么位置开始寻找,默认的是从0位置开始寻找。返回的参数pos的意思是在什么位置第一次发现了这个字符。在这个例子中返回的是pos=2。
str1 = str.substr(0,pos);字符串函数substr实现了从某个字符串中提取子字符串,这里的两个参数为:第一个参数是要求从什么位置开始,第二个参数是要求提取的子字符串长度为多少。在例子中第一次提取的就是:E:。
按照例子的执行过程:
首先检测\\的位置是2,然后str1是E:\\,这个文件夹肯定是存在的,所以i++,index++。
接着从t所在的位置开始检测\\,这时候返回的 位置是7,str1变为E:\\test,这时候就要检测这个文件夹是否存在,
若是不存在就由函数_mkdir来创建。