本人用CreateDirectory创建一个文件夹
然后将一些文件拷贝进去
再通过CFileFind类,搜索所有的文件,将文件删除
最后要用RemoveDirectory删除这个文件夹,但文件夹总是无法删除不知哪位高人指点一下!还有,要删除一个非空文件夹,比较好的办法是什么?

解决方案 »

  1.   

    //删除不为空目录
    删除空目录:
    RemoveDirectory("c:\\dd");
    删除不为空目录  
    void CTestDlg::RecursiveDelete(CString szPath)
    {
    CFileFind ff;
    CString path=szPath;
    if(szPath=="")
    return;
    if(path.Right(1)!="\\")
    path+="\\";
    path+="*.*";
    BOOL res=ff.FindFile(path);
    while(res)
    {
    res=ff.FindNextFile();
    //是文件时直接删除
    if(!ff.IsDots()&&!ff.IsDirectory())
    DeleteFile(ff.GetFilePath());
    else if(ff.IsDots())
    continue;
    else if(ff.IsDirectory())
    {
    //是目录时继续递归,删除该目录下的文件
    path=ff.GetFilePath();
    RecursiveDelete(path);
    //目录为空后删除目录
    RemoveDirectory(path);
    }
    }
    ff.Close();//如果没有此句,则无法删除最上层的目录
    RemoveDirectory(szPath);
    }
      

  2.   

    用SHFileOperation
    什么都伞了
      

  3.   

    就用SHFileOperation,很方便的。
      

  4.   

    删除文件夹和文件
    #include <direct.h>
    void DeleteDirFile(CString sPath)
    {
    WIN32_FIND_DATA fd;
    HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);

    if (hFind != INVALID_HANDLE_VALUE)
    {
    while (::FindNextFile(hFind,&fd))
    {
    //判断是否为目录
    if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
    {
    CString name;
    name = fd.cFileName;
    //判断是否为.和..
    if ((name != ".") && (name != ".."))
    {
    //如果是真正的目录,进行递归
    DeleteDirFile(sPath + fd.cFileName + "\\");
    }
    }
    else
    DeleteFile(sPath + fd.cFileName);
    }
    ::FindClose(hFind);
    }
    RemoveDirectory(sPath);
    }
      

  5.   

    /////删除一个目录及其下所有目录及文件的方法二//////////
    void DeleteDirectory2(CString strDir)
    {
    CFileFind ff;
    CString szDir = strDir;

    if(szDir.Right(1) != "\\")
    szDir += "\\";

    szDir += "*.*";

    BOOL res = ff.FindFile(szDir);
    while( res )
    {
    res = ff.FindNextFile();
    if(ff.IsDirectory() && !ff.IsDots())
    {
    CString strPath = ff.GetFilePath();
    CString strTitle = ff.GetFileTitle();


    DeleteDirectory2(strPath);
    RemoveDirectory(strPath);
    }
    else if(!ff.IsDirectory() && !ff.IsDots())
    {
    CString path=ff.GetFilePath();

    DeleteFile(path);

    }

    }
    ff.Close();
    RemoveDirectory(strDir);
    }//////////////////////////////方法二结束//////////////////////////////////////////
      

  6.   

    下面的方法删除非空目录更简单
    SHFILEOPSTRUCT shfileop;
    shfileop.hwnd = NULL;
    shfileop.wFunc = FO_DELETE ;
    shfileop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION  ;
    shfileop.pFrom = "c:\\Download1";
    shfileop.pTo = "";
    shfileop.lpszProgressTitle = "";
    shfileop.fAnyOperationsAborted = TRUE;
    int nOK = SHFileOperation(&shfileop);
      

  7.   

    VC++只能删除一个空目录,必须得先清除文件:
    你可以参考下面的帖子
    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=193461
      

  8.   

    SHFileOperation并不是没有问题,还有一点要注意你的目录没有正在被使用,有的时候会因为正在使用而无法删除,只要等到被释放了就可以了。
      

  9.   

    用SHFileOperation就跟文件管理器中删除是一样的,但是要注意,WINDOWS2000等系统是有个BUG即使没有文件删除也有时删不掉,经常删文件的人应该都知道。
      

  10.   

    用SHFileOperation边检测边删除就行了。多删除几次