如何在MFC应用程序中正确删除包含文件和子文件夹的文件夹

时间:2014-03-06 11:49:27

标签: c++ mfc directory

我有一个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();

}

请指导。

1 个答案:

答案 0 :(得分:1)

听起来像某个文件/文件夹的打开句柄,直到终止时才关闭,或者它可能以某种方式设置为应用程序的当前工作文件夹。

您是否考虑过使用SHFileOperation?你正在重新发明轮子。

SHFILEOPSTRUCT shfo = {
    NULL,
    FO_DELETE,
    path,
    NULL,
    FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION,
    FALSE,
    NULL,
    NULL };

SHFileOperation(&shfo);

“path”变量需要双重终止。