看代码吧。
一、
#ifndef C4FILESTREE_H
#define C4FILESTREE_H
#include <QObject>
#include <QDir>
/**************************************************
*这个类用来 获取指定文件夹内所有文件的路径+名字(filepath)
* **************************************************/
class C4FilesTree : public QObject
{
Q_OBJECT
public:
explicit C4FilesTree(QObject *parent = 0);
QStringList filesTree(QString path,bool brelative = true);
void setAbsDir(QString dir) {mAbsDir = dir;}//指定相对路径.
private:
QString mAbsDir;
};
#endif // C4FILESTREE_H
#include "c4filestree.h"
#include <QDebug>
#include <QFileInfo>
C4FilesTree::C4FilesTree(QObject *parent) :
QObject(parent)
{
}
QStringList C4FilesTree::filesTree(QString path)//奇怪了,怎么求相对路径的函数没有的?以后看.
{
QDir dir;
QStringList filespath;
filespath.empty();
if(!dir.cd(path))
return filespath;
QFileInfoList filelist = dir.entryInfoList(QDir::Files,QDir::Size);
foreach(QFileInfo str,filelist)
{
QString st= str.canonicalFilePath();
filespath <<st;
}
QFileInfoList dirlist = dir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot,QDir::Size);
foreach(QFileInfo dir,dirlist)
{
QStringList list = filesTree(dir.filePath());
if(!list.isEmpty())
{
filespath<<list;
}
}
return filespath;
}
二、
//遍历各级文件夹,并将这些文件夹中的文件删除 { QVector<QString> dirNames; QDir dir; QFileInfoList filst; QFileInfoList::iterator curFi; StringList filespath; 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()){ //遇到文件,则加进来 QString st=curFi.canonicalFilePath(); filespath <<st; } curFi++; }//end of while } }