C、 C++遍历文件夹,删除文件夹

来源:互联网 发布:redis mysql 性能对比 编辑:程序博客网 时间:2024/06/05 10:32

      1,使用SHFileOperation删除文件夹,

bool CTools:: DelFilesOfDir(string strDir){    int iRet = ACCESS(strDir.c_str(),0);      if (iRet != 0)      {        return false;    }    SHFILEOPSTRUCT    shFileOp;    TCHAR     strCurrentPath[MAX_PATH] = {0};    char      szTemp[MAX_PATH] = {0};    string    strTmp;    memset(&shFileOp,0,sizeof(shFileOp));    GetCurrentDirectory(MAX_PATH/2, strCurrentPath);    CTools::TCharToChar(szTemp,strCurrentPath);    strTmp = string(szTemp)+'\\'+strDir;    memset(strCurrentPath,0,sizeof(strCurrentPath));    CTools::CharToTChar(strCurrentPath,strTmp.c_str());    shFileOp.wFunc    = FO_DELETE;    shFileOp.pFrom    = strCurrentPath;    shFileOp.pTo    = NULL;    shFileOp.fFlags    = FOF_SILENT | FOF_NOCONFIRMATION;    SHFileOperation(&shFileOp);    return true;}
这个方法是mfc工程中删除,应该说还是很好用的,这个函数实现的功能也很多,删除只是其中之一,其他功能和相关属性可以搜下,资料很多,但是我在用的时候遇到一个问题一直没解决,debug下没删掉,但是release下却成功了,找了半天发现是属性的路径赋值有问题,直接用“”字符串就可以但是用赋值就一直有问题,没找到解决方案。

    2,使用FindFirstFile和FindNextFile遍历文件夹这个网上的例子很多,这就不写了。

3,因为之前有用到在控制台程序中删除非空文件夹,使用_findfirstfile和_findnextfile、_fileclose结合的方法,和第二个类似

void CFileTest::ReadDir(const string& strDirPath){string strPathTmp = strDirPath + "\\*.*";long lFile;string sAddPath;struct _finddata_t sDate;lFile = _findfirst(strPathTmp.c_str(), &sDate);if (lFile == -1){printf("read file fail!\n");return ;}printf("文件: %s\\%s\n", strDirPath.c_str(), sDate.name);while (_findnext(lFile, &sDate) == 0){if(sDate.attrib == _A_SUBDIR){sAddPath = strDirPath;sAddPath += "\\";sAddPath += sDate.name;if (string(sDate.name)=="." || string(sDate.name)==".."){continue;}ReadDir(sAddPath);}else{// 删除文件string strFile = strDirPath + "\\" + string(sDate.name);printf("删除文件: %s\n", strFile.c_str());remove(strFile.c_str());}}_findclose(lFile);// 删除文件夹rmdir(strDirPath.c_str());printf("删除目录: %s\n",sAddPath.c_str());}
这里只给个测试用的循环函数直接传入要删除的文件夹路径就可以编译环境是vs2008。

0 0
原创粉丝点击