c++删除文件夹

    技术2026-04-18  1

    转自:http://blog.csdn.net/sshhbb/archive/2010/12/07/6061029.aspx

     

    c++语言本身是不能删除文件或文件夹的,他们是windows操作系统里的东西,所以得借助其api函数。

    其一:使用shell  接口:

    void FileDelete(CString directory) {  SHFILEOPSTRUCT    shFileOp;  char      strCurrentPath[MAX_PATH];  memset(&shFileOp,0,sizeof(shFileOp));      GetCurrentDirectory(MAX_PATH,strCurrentPath);  strcat_s(strCurrentPath,sizeof(strCurrentPath),directory);  strCurrentPath[strlen(strCurrentPath)+1] = 0;  shFileOp.wFunc    = FO_DELETE;  shFileOp.pFrom    = strCurrentPath;  shFileOp.pTo    = NULL;  shFileOp.fFlags    = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;

     SHFileOperation(&shFileOp); }

    使用该函数你得 #include<Shlwapi.h> #pragma comment(lib,"Shlwapi.lib")  使用他可以将directory和其下的所有文件静默删除,听说在删除共享文件夹的时候会出错或提示,没试过。不过我使用system()做删除的时候共享文件夹下的删除是会出错的。

    其二: 使用MFC的CFileFind递归遍历文件并删除文件和文件夹

     bool DeleteDirectory(char* strDirName) {     CFileFind tempFind;         char strTempFileFind[MAX_PATH];

        sprintf(strTempFileFind,"%s//*.*", strDirName);

        BOOL IsFinded = tempFind.FindFile(strTempFileFind);

        while (IsFinded)     {         IsFinded = tempFind.FindNextFile();

            if (!tempFind.IsDots())         {             char strFoundFileName[MAX_PATH];

                strcpy(strFoundFileName, tempFind.GetFileName().GetBuffer(MAX_PATH));

                if (tempFind.IsDirectory())             {                 char strTempDir[MAX_PATH];

                    sprintf(strTempDir,"%s//%s", strDirName, strFoundFileName);

                    DeleteDirectory(strTempDir);             }             else             {                 char strTempFileName[MAX_PATH];

                    sprintf(strTempFileName,"%s//%s", strDirName, strFoundFileName);

                    DeleteFile(sTempFileName);             }         }     }

        tempFind.Close();

        if(!RemoveDirectory(strDirName))     {         return FALSE;     }

        return TRUE; }

     

    //

     

    转自:http://zhidao.baidu.com/question/188089955.html

     

     

    #include <stdlib.h> #include <stdio.h> #include <string.h> void main() { char str[120] ="RMDIR /S "; //加上 /Q 删除时不要求确认 char str2[100]; //文件夹的绝对路径 printf("输入的文件夹位置为:/n"); scanf("%s",str2); strcat(str,str2); system(str); system("pause"); }

     

    方便的办法,你可以使用dos命令,在C++里可以用system调用 比如system("RMDIR aaa"); 就是删掉aaa这个目录 dos命令可以在cmd里打help回车查看http://topic.csdn.net/u/20090126/23/950e840e-8ba9-4be7-94ba-2e48e7cdf862.htmlBOOL DeleteDir(char * path) { WIN32_FIND_DATA finddata; HANDLE hfind; char * pdir; pdir=new char[strlen(path)+5]; strcpy(pdir,path); if(path[strlen(path)-1]!='//') strcat(pdir,"//*.*"); else strcat(pdir,"*.*"); hfind=FindFirstFile(pdir,&finddata); if(hfind==INVALID_HANDLE_VALUE) return FALSE; delete []pdir; do { pdir=new char[strlen(path)+strlen(finddata.cFileName)+2]; sprintf(pdir,"%s//%s",path,finddata.cFileName); if(strcmp(finddata.cFileName,".")==0 ||strcmp(finddata.cFileName,"..")==0) { RemoveDirectory(pdir); continue; } if((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==0) DeleteFile(pdir); else DeleteDir(pdir); delete []pdir; }while(FindNextFile(hfind,&finddata)); if(RemoveDirectory(path)) return TRUE; else return FALSE; } //

    转自:http://zhidao.baidu.com/question/96292128.html

    c++删除空文件夹

    使用方法: char dir[] = "d://test//"; DeleteEmptyDirectories(dir); / void DeleteEmptyDirectories(const char *dir) { WIN32_FIND_DATA finder;     HANDLE hFileFind;     char search[MAX_PATH]; strcpy(search, dir); strcat(search, "*.*");     hFileFind = FindFirstFile(search, &finder);     if (hFileFind != INVALID_HANDLE_VALUE)     {         do         {             char path[MAX_PATH];             strcpy(path, dir);             strcat(path, finder.cFileName);       if ((finder.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)     && strcmp(finder.cFileName, ".")     && strcmp(finder.cFileName, ".."))    {         char subdir[MAX_PATH];     strcpy(subdir, path);     strcat(subdir, "//");     DeleteEmptyDirectories(subdir);     // AfxMessageBox(subdir);     RemoveDirectory(path);    }            } while (FindNextFile(hFileFind, &finder) != 0);           FindClose(hFileFind);     } } 另外,用SHFILEOPSTRUCT、SHFileOperation也可以删除文件夹。
    最新回复(0)