最好是不用MFC,而使用标准的WINAPI,因为,这要做个COM,所以可能会不使用MFC,谢谢高手们指导!!

解决方案 »

  1.   

    这是一个mfc的例子 com也可以用mfc嘛!我喜欢mfc:)
    void DeleteFolder(CString sPath)
    {
    CFileFind ff;
    BOOL bFound;
    bFound = ff.FindFile(sPath + "\\*.*");
    while(bFound)
    {
    bFound = ff.FindNextFile();
    CString sFilePath = ff.GetFilePath(); if(ff.IsDirectory())
    {
    if(!ff.IsDots())
    DeleteFolder(sFilePath);
    }
    else
    {
    if(ff.IsReadOnly())
    {
    SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL);
    }
    DeleteFile(sFilePath);
    }
    }
    ff.Close();
    SetFileAttributes(sPath, FILE_ATTRIBUTE_NORMAL);
    RemoveDirectory(sPath);
    }
      

  2.   

    大致如此。如果要用API,那么用FindFirstFile和FindNextFile组合来替代CFileFind类的操作好了。
      

  3.   

    int SHFileOperation(          
    LPSHFILEOPSTRUCT lpFileOp
    );
    也可以的
      

  4.   

    bool __stdcall deleteDirectory(const char* pszDir)
    {
    WIN32_FIND_DATA fd;
    char szTempFileFind[MAX_PATH] = { 0 };
    bool bIsFinish = false; ZeroMemory(&fd, sizeof(WIN32_FIND_DATA)); sprintf(szTempFileFind, "%s\\*.*", pszDir); HANDLE hFind = FindFirstFile(szTempFileFind, &fd);
    if (hFind == INVALID_HANDLE_VALUE)
    return false; while (!bIsFinish) {
    bIsFinish = (FindNextFile(hFind, &fd)) ? false : true;
    if ((strcmp(fd.cFileName, ".") != 0) && (strcmp(fd.cFileName, "..") != 0)) {
    char szFoundFileName[MAX_PATH] = { 0 };
    strcpy(szFoundFileName, fd.cFileName); if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
    char szTempDir[MAX_PATH] = { 0 };
    sprintf(szTempDir, "%s\\%s", pszDir, szFoundFileName);
    deleteDirectory(szTempDir);
    } else {
    char szTempFileName[MAX_PATH] = { 0 };
    sprintf(szTempFileName, "%s\\%s", pszDir, szFoundFileName);
    DeleteFile(szTempFileName);
    }
    }
    }
    FindClose(hFind); if (!RemoveDirectory(pszDir))
    return false; return true;
    }