实现文件夹创建的C子函数并有详解

来源:互联网 发布:淘宝上的天王表旗舰店 编辑:程序博客网 时间:2024/06/06 07:50

该子函数实现创建一个子文件夹的功能。

调用该函数的时候参数为要创建的文件夹的路径和名字,比如要创建的目标文件夹为: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来创建。