欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

递归的创建目录

程序员文章站 2022-04-01 13:45:35
...
递归创建目录、删除目录

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;
}

相关标签: 递归的创建目录