您好,欢迎访问一九零五行业门户网

递归的创建目录

递归创建目录、删除目录
windows api中没有提供现成的多层创建目录、删除目录。这里修改了部分代码实现递归创建目录、删除目录。
//删除目录
bool deletedirectory(char* sdirname) 

    cfilefind tempfind; 
    char stempfilefind[200] ;
sprintf(stempfilefind,%s\\*.*,sdirname); 
    bool isfinded = tempfind.findfile(stempfilefind); 
    while (isfinded) 
 { 
        isfinded = tempfind.findnextfile();
if (!tempfind.isdots()) 
  { 
            char sfoundfilename[200]; 
            strcpy(sfoundfilename,tempfind.getfilename().getbuffer(200));
if (tempfind.isdirectory()) 
   { 
                char stempdir[200]; 
                sprintf(stempdir,%s\\%s,sdirname,sfoundfilename); 
                deletedirectory(stempdir); 
            } 
            else 
   { 
                char stempfilename[200]; 
                sprintf(stempfilename,%s\\%s,sdirname,sfoundfilename); 
                deletefile(stempfilename); 
            } 
        } 
    } 
    tempfind.close(); 
    if(!removedirectory(sdirname)) 
 { 
        return false; 
    } 
    return true; 
}
// 判断目录是否存在
bool folderexists(cstring s)
{
    dword attr; 
    attr = getfileattributes(s); 
    return (attr != (dword)(-1) ) &&
        ( attr & file_attribute_directory); 
}
// 创建目录
bool createdir(cstring p)
{
    int len=p.getlength();
    if ( len <2 ) return false;
if('\\'==p[len-1])
    {
        p=p.left(len-1);
        len=p.getlength();
    }
    if ( len <=0 ) return false;
if (len <=3) 
    {
        if (folderexists(p))return true;
        else return false; 
    }
if (folderexists(p))return true;
cstring parent;
    parent=p.left(p.reversefind('\\') );
if(parent.getlength()<=0)return false;
bool ret=createdir(parent);
if(ret) 
    {
        security_attributes sa;
        sa.nlength=sizeof(security_attributes);
        sa.lpsecuritydescriptor=null;
        sa.binherithandle=0;
        ret=(createdirectory(p,&sa)==true);
        return ret;
    }
    else
        return false;
}
其它类似信息

推荐信息