Qt删除文件夹及子文件夹全部文件时父文件夹一并删除的原因与解决办法
初学Qt文件操作,总会先去查阅各种资料,参考各种代码然后一点点地去调试。
我在编写“删除文件夹及子目录与所有文件”代码的时候,参考很多博客、专栏之后看到很多都是同样的代码。如下:
//删除文件夹
bool MainWindow::DelDir(const QString &path)
{
if (path.isEmpty()){
return false;
}
QDir dir(path);
if(!dir.exists()){
return true;
}
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //设置过滤
QFileInfoList fileList = dir.entryInfoList(); // 获取所有的文件信息
foreach (QFileInfo file, fileList){ //遍历文件信息
if (file.isFile()){ // 是文件,删除
file.dir().remove(file.fileName());
}else{ // 递归删除
DelDir(file.absoluteFilePath());
}
}
return dir.rmpath(dir.absolutePath()); // 删除文件夹
}
这个代码我拿来做测试,发现将父文件夹一并删除了,然后在父文件夹中随便建立一个txt文本再进行测试发现,父文件保留了下来,因此猜测:程序中存 “在当父文件夹为空时,删除文件夹路径时将一并删除父文件夹路径” 。
因此去查看代码与函数方法性质,同时在IDE上测试。
在路径方法上做测试的时候,输入“dir.rm”发现有两个方法:
1、rmpath;
2、rmdir;
故去查找函数方法介绍,得其原因,rmpath与rmdir的区别就在于:rmpath会在删除空文件夹的时候,将空的父文件夹一并删除。将rmpath换成rmdir后,问题解决。
附:个人觉得在查阅博客资料之后一定要做尽量多种情况的测试,并且将实际情况考虑完全,在代码中优化。
例:若是某目录的子目录不存在,可直接用mkdir创建子目录,倘若当前目录或者其父目录不存在呢?
阿猪米德
2019.05.09于湖北武汉