我有一个MFC应用程序,我遇到文件夹删除问题。当我删除文件夹以及所有包含文件时,它显示从应用程序文件列表中删除但它在Windows资源管理器中显示但仍然无法访问。当我关闭应用程序时,该文件夹从Windows资源管理器中消失。为什么会这样?我在下面的代码中看到RemoveDirectory()
返回零。但如果它没有被删除,那么为什么在关闭应用程序后它会消失。功能如下:
void SomeClass::DeleteFileFolder(CString filePath)
{
CFileFind finder;
CString strWildcard(filePath);
strWildcard += _T("\\*.*");
CString str = "";
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
{
CString sFile = finder.GetFileName();
if(sFile !="." && sFile !="..")
{
CString sFile = finder.GetFileName();
str = finder.GetFilePath();
BOOL bDel = DeleteFile(str);
}
}
else if (finder.IsDirectory())
{
CString sDir = finder.GetFileName();
str = finder.GetFilePath();
if((str !=".") && (str !="..") && (str != ".svn"))
{
DeleteFileFolder(str);
BOOL bDel = RemoveDirectory(str);
}
}
else
{
CString sFile = finder.GetFileName();
str = finder.GetFilePath();
BOOL bDel = DeleteFile(str);
}
}
BOOL bDel = RemoveDirectory(filePath);
finder.Close();
}
请指导。
答案 0 :(得分:1)
听起来像某个文件/文件夹的打开句柄,直到终止时才关闭,或者它可能以某种方式设置为应用程序的当前工作文件夹。
您是否考虑过使用SHFileOperation?你正在重新发明轮子。
SHFILEOPSTRUCT shfo = {
NULL,
FO_DELETE,
path,
NULL,
FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION,
FALSE,
NULL,
NULL };
SHFileOperation(&shfo);
“path”变量需要双重终止。