您的位置:首页 > 其它

windows api 实现删除指定目录下的所有文件(包括子文件夹下的所有文件)

2013-12-14 15:39 821 查看
转载自http://blog.csdn.net/jaff20071234/article/details/6559533

有一个CFileFind相关的示例,但因这部分功能需要放在服务器端,故用win api实现了这个功能,代码如下:

[cpp] view
plaincopy

BOOL IsDirectory(const char *pDir)  

{  

    char szCurPath[500];  

    ZeroMemory(szCurPath, 500);  

    sprintf_s(szCurPath, 500, "%s//*", pDir);  

    WIN32_FIND_DATAA FindFileData;        

    ZeroMemory(&FindFileData, sizeof(WIN32_FIND_DATAA));  

  

    HANDLE hFile = FindFirstFileA(szCurPath, &FindFileData); /**< find first file by given path. */  

  

    if( hFile == INVALID_HANDLE_VALUE )   

    {  

        FindClose(hFile);  

        return FALSE; /** 如果不能找到第一个文件,那么没有目录 */  

    }else  

    {     

        FindClose(hFile);  

        return TRUE;  

    }  

      

}  

  

BOOL DeleteDirectory(const char * DirName)  

{  

//  CFileFind tempFind;     //声明一个CFileFind类变量,以用来搜索  

    char szCurPath[MAX_PATH];       //用于定义搜索格式  

    _snprintf(szCurPath, MAX_PATH, "%s//*.*", DirName); //匹配格式为*.*,即该目录下的所有文件  

    WIN32_FIND_DATAA FindFileData;        

    ZeroMemory(&FindFileData, sizeof(WIN32_FIND_DATAA));  

    HANDLE hFile = FindFirstFileA(szCurPath, &FindFileData);  

    BOOL IsFinded = TRUE;  

    while(IsFinded)  

    {  

        IsFinded = FindNextFileA(hFile, &FindFileData); //递归搜索其他的文件  

        if( strcmp(FindFileData.cFileName, ".") && strcmp(FindFileData.cFileName, "..") ) //如果不是"." ".."目录  

        {  

            string strFileName = "";  

            strFileName = strFileName + DirName + "//" + FindFileData.cFileName;  

            string strTemp;  

            strTemp = strFileName;  

            if( IsDirectory(strFileName.c_str()) ) //如果是目录,则递归地调用  

            {     

                printf("目录为:%s/n", strFileName.c_str());  

                DeleteDirectory(strTemp.c_str());  

            }  

            else  

            {  

                DeleteFileA(strTemp.c_str());  

            }  

        }  

    }  

    FindClose(hFile);  

  

    BOOL bRet = RemoveDirectoryA(DirName);  

    if( bRet == 0 ) //删除目录  

    {  

        printf("删除%s目录失败!/n", DirName);  

        return FALSE;  

    }  

    return TRUE;  

}  

 

使用时,直接调用即可,如:DeleteDirectory("C:");删除c盘下的所有的文件以及文件夹,当然对于windows不允许删除的文件,

也是不可以删除的,相关联的上层文件夹等等都不可删除,因为不能够删除非空的文件夹。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐