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

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的指针函数是指返回值为指针类型的函数,它们在函数的定义和调用上与普通函数有所不同。 指针函数的定义需要在函数名前加上返回类型为指针的声明,并在函数体内返回一个指针类型的值。例如,我们可以定义一个返回整型指针的函数如下: ```c int* allocateIntArray(int size) { int* array = (int*)malloc(size * sizeof(int)); return array; } ``` 在调用指针函数时,需要用一个与返回类型相匹配的指针变量接收返回值。例如,调用上述函数并将返回值存储在指针变量中: ```c int* myArray = allocateIntArray(5); ``` 上述代码中,myArray是一个整型指针变量,它用于存储allocateIntArray函数的返回值。这个返回值是一个指向分配的整型数组的指针。 指针函数的调用过程中,我们还需要注意以下几点: 1. 为了避免内存泄漏,我们通常需要在不使用指针的时候手动释放内存,可以使用free函数来释放通过malloc分配的内存。 2. 在函数内部分配的内存空间返回给调用者后,我们应该确保在使用这块内存之前不会被其他操作修改或释放掉,否则可能导致程序运行时错误。 3. 指针函数也可以作为参数传递给其他函数,使得我们可以更方便地使用和操作指针类型的数据。 总结来说,指针函数是具有返回值为指针类型的函数,其定义和调用方式与普通函数有所区别。使用指针函数可以更灵活地操作和传递指针类型的数据,但在使用时需要注意内存的释放和确保指针的有效性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值