最近由于业务需求,需要实现删除某个文件目录下的空文件夹功能,具体看如下代码:
- bool checkFileOrDirExist(const QString qstrFileDirOrPath)
- {
- bool bRet = false;
- QFileInfo objFileInfo(qstrFileDirOrPath);
- if(objFileInfo.isFile())
- {
- bRet = objFileInfo.exists();
- }
- else if(objFileInfo.isDir())
- {
- bRet = objFileInfo.exists();
- }
- else
- {
- bRet = false;
- }
-
- return bRet;
- }
-
- /**************************************************
- * 功能:删除空的文件夹
- * 输入参数:
- * qstrDirPath:文件夹路径
- * 返回值:
- * bool:true -- 删除成功,false -- 删除失败
- * **************************************************/
- bool clearEmptyFolder(const QString& qstrDirPath)
- {
- bool bRet = true;
-
- do
- {
- if(!checkFileOrDirExist(qstrDirPath))
- {
- bRet = true;
- break;
- }
-
- QDir qdrPath(qstrDirPath);
- qdrPath.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden); //set filter
- QFileInfoList lstFileInfo = qdrPath.entryInfoList(); //get all file info
- foreach(QFileInfo objFileInfo, lstFileInfo)
- {
- if(objFileInfo.isDir())
- {
- QString qstrSubFilePath = objFileInfo.absoluteFilePath();
- QDir qdrSubPath(qstrSubFilePath);
- qdrSubPath.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
- QFileInfoList qlstFileInfo = qdrSubPath.entryInfoList();
- if(qlstFileInfo.count() <= 0)
- {
- logInfo(QString("remove empty dir: %1.").arg(qstrSubFilePath));
- qdrSubPath.rmdir(qstrSubFilePath);
- }
- else
- {
- clearEmptyFolder(qstrSubFilePath);
- }
- }
- }
-
- }while(0);
-
- return bRet;