我在程序中使用的删除文件夹的方法,不知对你有没有帮助
bool DeleteDirectory(AnsiString DirName)
{
//该函数删除一个非空的目录DirName
SHFILEOPSTRUCT filestruct;
memset(&filestruct,0,sizeof(filestruct)); //将该结构缓冲区用0填充
filestruct.hwnd=NULL;
filestruct.wFunc=FO_DELETE;//执行删除
filestruct.pFrom=DirName.c_str();
filestruct.pTo=NULL;
filestruct.fFlags=FOF_NOCONFIRMATION+FOF_SILENT;
filestruct.hNameMappings=NULL;
if(SHFileOperation(&filestruct)==0)
return true;
else
return false;
}
//另外,我从别人那儿得到的一种方法如下
bool __stdcall deldir(char * dir_fullpath) // 删除指定的目录
{
char dir[260];
char filename[260];
int len = 0;
int ch = '//';
strcpy(dir, dir_fullpath);
len = strlen(dir);
char *temp = strrchr(dir, ch);
if(len < 4 || temp == NULL) // 可能为磁盘根目录或者不是有效的目录路径
return false;
if(temp != NULL)
{
if((temp - dir + 1) != len) // 在目录后添加'/'
strcat(dir, "//");
}
GetCurrentDirectory(260, filename);
strcat(filename, "//");
if(strcmp(dir, filename) == 0) // 如果要删除的目录是当前目录
{
strcat(filename, "..");
SetCurrentDirectory(filename); // 改变当前目录
}
WIN32_FIND_DATA finddata;
HANDLE fFile;
bool flag;
strcpy(filename, dir);
strcat(filename, "*.*");
fFile=FindFirstFile(filename, &finddata);
flag=true;
if(fFile!=INVALID_HANDLE_VALUE) // 此目录不是空目录
{
BOOL bfind = true;
while(bfind)
{
if(finddata.cFileName[0] != '.')
{
strcpy(filename, dir);
strcat(filename, finddata.cFileName);
if(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ // 删除找到的子目录
strcat(filename, "//");
flag = flag && deldir(filename);
}
else
{ // 删除找到的文件
SetFileAttributes(filename, FILE_ATTRIBUTE_NORMAL);
flag = flag && DeleteFile(filename);
}
}
bfind = FindNextFile(fFile, &finddata);
}
FindClose(fFile);
}
if(flag)
{
SetFileAttributes(dir_fullpath, FILE_ATTRIBUTE_NORMAL);
if(RemoveDirectory(dir_fullpath))
return true;
}
return false;
}
bool DeleteDirectory(AnsiString DirName)
{
//该函数删除一个非空的目录DirName
SHFILEOPSTRUCT filestruct;
memset(&filestruct,0,sizeof(filestruct)); //将该结构缓冲区用0填充
filestruct.hwnd=NULL;
filestruct.wFunc=FO_DELETE;//执行删除
filestruct.pFrom=DirName.c_str();
filestruct.pTo=NULL;
filestruct.fFlags=FOF_NOCONFIRMATION+FOF_SILENT;
filestruct.hNameMappings=NULL;
if(SHFileOperation(&filestruct)==0)
return true;
else
return false;
}
//另外,我从别人那儿得到的一种方法如下
bool __stdcall deldir(char * dir_fullpath) // 删除指定的目录
{
char dir[260];
char filename[260];
int len = 0;
int ch = '//';
strcpy(dir, dir_fullpath);
len = strlen(dir);
char *temp = strrchr(dir, ch);
if(len < 4 || temp == NULL) // 可能为磁盘根目录或者不是有效的目录路径
return false;
if(temp != NULL)
{
if((temp - dir + 1) != len) // 在目录后添加'/'
strcat(dir, "//");
}
GetCurrentDirectory(260, filename);
strcat(filename, "//");
if(strcmp(dir, filename) == 0) // 如果要删除的目录是当前目录
{
strcat(filename, "..");
SetCurrentDirectory(filename); // 改变当前目录
}
WIN32_FIND_DATA finddata;
HANDLE fFile;
bool flag;
strcpy(filename, dir);
strcat(filename, "*.*");
fFile=FindFirstFile(filename, &finddata);
flag=true;
if(fFile!=INVALID_HANDLE_VALUE) // 此目录不是空目录
{
BOOL bfind = true;
while(bfind)
{
if(finddata.cFileName[0] != '.')
{
strcpy(filename, dir);
strcat(filename, finddata.cFileName);
if(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ // 删除找到的子目录
strcat(filename, "//");
flag = flag && deldir(filename);
}
else
{ // 删除找到的文件
SetFileAttributes(filename, FILE_ATTRIBUTE_NORMAL);
flag = flag && DeleteFile(filename);
}
}
bfind = FindNextFile(fFile, &finddata);
}
FindClose(fFile);
}
if(flag)
{
SetFileAttributes(dir_fullpath, FILE_ATTRIBUTE_NORMAL);
if(RemoveDirectory(dir_fullpath))
return true;
}
return false;
}