其实以前有写过一篇博文,是关于删除文件夹以及文件夹中的内容.打开博文
但是这种方式,在XP系统中有时候无法删除.
会报出这种错误.
于是在网上找到了两种新的删除文件夹的方法:
bool CDeleteFolderDlg::DeleteDirectory(CString DirName)
{
//AfxMessageBox("执行删除文件夹:" + DirName);
CString PUBPATH;
PUBPATH = DirName;
CFileFind tempFind;
DirName += "\\*.*";
BOOL IsFinded = (BOOL)tempFind.FindFile(DirName);
while(IsFinded)
{
IsFinded = (BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
CString strDirName;
strDirName += PUBPATH;
strDirName += "\\";
strDirName += tempFind.GetFileName();
//AfxMessageBox("strDirName :" + strDirName);
if(tempFind.IsDirectory())
{
//strDirName += PUBPATH;
DeleteDirectory(strDirName);
}
else
{
SetFileAttributes(strDirName, FILE_ATTRIBUTE_NORMAL); //去掉文件的系统和隐藏属性
DeleteFile(strDirName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(PUBPATH))
{
return false ;
}
//AfxMessageBox("文件夹删除成功...");
return true;
}
//方法二
bool CDeleteFolderDlg::DeleteDirectory( char* DirName)
{
HANDLE hFirstFile = NULL;
WIN32_FIND_DATA FindData;
char currdir[MAX_PATH] = {0};
sprintf_s(currdir, "%s\\*.*", DirName);
hFirstFile = ::FindFirstFile(currdir, &FindData);
if( hFirstFile == INVALID_HANDLE_VALUE )
return false;
BOOL bRes = true;
while(bRes)
{
bRes = ::FindNextFile(hFirstFile, &FindData);
if( (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //发现目录
{
if( !strcmp(FindData.cFileName, ".") || !strcmp(FindData.cFileName, "..") ) //.或..
continue;
else
{
char tmppath[MAX_PATH] = {0};
sprintf_s(tmppath, "%s\\%s", DirName, FindData.cFileName);
DeleteDirectory(tmppath);
}
}
else //发现文件
{
char tmppath[MAX_PATH] = {0};
sprintf_s(tmppath, "%s\\%s", DirName, FindData.cFileName);
::DeleteFile(tmppath);
}
}
::FindClose(hFirstFile);
if(!RemoveDirectory(DirName))
{
return false ;
}
return true;
}
两种方式都亲测有效,并且在win7和xp系统都位发现BUG!
实例代码下载连接:http://download.csdn.net/detail/qq_23992597/9600111