最近由于业务需求,需要实现删除某个文件目录下的空文件夹功能,具体看如下代码:
1 bool checkFileOrDirExist(const QString qstrFileDirOrPath)
2 {
3 bool bRet = false;
4 QFileInfo objFileInfo(qstrFileDirOrPath);
5 if(objFileInfo.isFile())
6 {
7 bRet = objFileInfo.exists();
8 }
9 else if(objFileInfo.isDir())
10 {
11 bRet = objFileInfo.exists();
12 }
13 else
14 {
15 bRet = false;
16 }
17
18 return bRet;
19 }
20
21 /**************************************************
22 * 功能:删除空的文件夹
23 * 输入参数:
24 * qstrDirPath:文件夹路径
25 * 返回值:
26 * bool:true -- 删除成功,false -- 删除失败
27 * **************************************************/
28 bool clearEmptyFolder(const QString& qstrDirPath)
29 {
30 bool bRet = true;
31
32 do
33 {
34 if(!checkFileOrDirExist(qstrDirPath))
35 {
36 bRet = true;
37 break;
38 }
39
40 QDir qdrPath(qstrDirPath);
41 qdrPath.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden); //set filter
42 QFileInfoList lstFileInfo = qdrPath.entryInfoList(); //get all file info
43 foreach(QFileInfo objFileInfo, lstFileInfo)
44 {
45 if(objFileInfo.isDir())
46 {
47 QString qstrSubFilePath = objFileInfo.absoluteFilePath();
48 clearEmptyFolder(qstrSubFilePath);
49
50 QDir qdrSubPath(qstrSubFilePath);
51 qdrSubPath.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
52 QFileInfoList qlstFileInfo = qdrSubPath.entryInfoList();
53 if(qlstFileInfo.count() <= 0)
54 {
55 logInfo(QString("remove empty dir: %1.").arg(qstrSubFilePath));
56 qdrSubPath.rmdir(qstrSubFilePath);
57 }
58 }
59 }
60
61 }while(0);
62
63 return bRet;
64 }