核心点是函数QDir::setFilter()的参数设置QDir::Dirs,如下所示:
dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
示例:
sComFilePath是指定的目录路径,现递归打开该目录并将其中以.acf结尾的全部文件写入到"game_acf.txt"文本中。
QDir dir(sComFilePath);
if (!dir.exists()) {
return -1;
}
//取到所有的文件和文件名,但是去掉.和..的文件夹(这是QT默认有的)
dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);
//文件夹优先
dir.setSorting(QDir::DirsFirst);
//转化成一个list
QFileInfoList list = dir.entryInfoList();
if(list.size()< 1 ) {
return -1;
}
int i=0;
static int k=0;
//递归算法的核心部分
do{
QFileInfo fileInfo = list.at(i);
QString tt = fileInfo.fileName();
//如果是文件夹,递归
bool bisDir = fileInfo.isDir();
if(bisDir) {
Findexe(fileInfo.filePath());
}
else{
bool isacf = fileInfo.fileName().endsWith(".acf");
if (isacf == true) {
QString afcfile = fileInfo.filePath();
QFile file( "./game_acf.txt" );
if ( file.open( QIODevice::ReadWrite | QIODevice::Append ))
{
if(k>0)
{
file.write("\n");
}
k++;
file.write(afcfile.toUtf8());
file.close();
}
}
}//end else
i++;
} while(i < list.size());
return 1;