您的位置:首页 > 编程语言 > Qt开发

分享一个Qt中删除文件夹的函数(非递归实现)

2012-06-03 21:16 477 查看
/*递归删除文件夹,即使里面有内容
**
**dir :文件夹的名字,绝对路径和相对路径均可
**
**返回值 :成功后返回true;否则返回false
*/
bool removeDirWithContent(const QString &dirName){
	static QVector<QString> dirNames;
	static QString funcErrMsg="删除[%1]失败.";
	static QString funcInfFndMsg="发现[%1].";
	static QString funcInfDelMsg="删除[%1]成功.";
	QDir dir;
	QFileInfoList filst;
	QFileInfoList::iterator curFi;

	//初始化
	dirNames.clear();
	if(dir.exists()){
		dirNames<<dirName;
	}
	else{
		return true;
	}

	//遍历各级文件夹,并将这些文件夹中的文件删除
	for(int i=0;i<dirNames.size();++i){
		dir.setPath(dirNames[i]);
		filst=dir.entryInfoList(QDir::Dirs|QDir::Files
								|QDir::Readable|QDir::Writable
								|QDir::Hidden|QDir::NoDotAndDotDot
								,QDir::Name);
		if(filst.size()>0){
			curFi=filst.begin();
			while(curFi!=filst.end()){
				 //遇到文件夹,则添加至文件夹列表dirs尾部
				if(curFi->isDir()){
					dirNames.push_back(curFi->filePath());
				}else if(curFi->isFile()){
					//遇到文件,则删除之
					if(!dir.remove(curFi->fileName())){
						return false;
					}
				}
				curFi++;
			}//end of while
		}
	}
	
	//删除文件夹
	for(int i=dirNames.size()-1;i>=0;--i){
		dir.setPath(dirNames[i]);
		if(!dir.rmdir(".")){
			return false;
		}
	}
	
	return true;
}


使用方法:

bool b;
b=removeDirWithContent("c:/a/b");


该函数可以删除文件夹,即使文件夹中有内容:子文件夹或文件,可谓“遇神杀神,遇佛杀佛”版~


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: