记录一下,说不定以后会再用到。这是在Qt下写的,以后有机会再改成C++通用的。
bool RemoveDir::removeDirContent(const QString & dirpath)
{QFileInfoList filelists;
QFileInfo Curfile;
QDir dir(dirpath);
if(!dir.exists())
{
return false;//文件不存,则返回false
}
if (dir.rmdir(dirpath)) //如果文件为空
{
return true;
}
filelists=dir.entryInfoList(QDir::Dirs|QDir::Files
|QDir::Readable|QDir::Writable
|QDir::Hidden|QDir::NoDotAndDotDot
,QDir::Name);
while(filelists.size() > 0) //递归出口条件
{
int fileSum = filelists.size();
for (int i = fileSum - 1; i >= 0; i--)
{
Curfile = filelists[i];
if (Curfile.isFile()) //如果是文件则删除
{
QFile fileTmep(Curfile.filePath());
fileTmep.remove();
filelists.removeAt(i);
}
else
{
QString path = Curfile.filePath();
QDir CurDir(path);
if (!CurDir.rmdir(path)) //如果是文件夹且当前文件夹不为空,递归调用
{
removeDirContent(path);
CurDir.rmdir(path); //递归删除文件内容后,删除本文件夹
filelists.removeAt(i); //删除记录
}
}
}
}
if (!dir.rmdir(dirpath)) //递归删除文件内容后,删除本文件夹
{
return false;
}
return true;
}