c++删除文件夹

转自: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.html
BOOL 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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值