求解一个函数
代码如下:
******************************************************************
QStringList findFiles(const QString &startDir, QStringList filters)
{
1 QStringList names;
2 QDir dir(startDir);
3 foreach (QString file, dir.entryList(filters, QDir::Files))
4 names += startDir + "/" + file;
5 qDebug()<<"names1: "<<names<<"\n"<<"subdir1: "<<startDir<<"\n"<<"\n";
6 foreach (QString subdir, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot))
7 names += findFiles(startDir + "/" + subdir, filters);
8 qDebug()<<"names2: "<<names<<"\n"<<"subdir2: "<<startDir<<"\n"<<"\n";
return names;
}
********************************************************************
关于这个函数,是qtsdk-2009.05/qt/examples/qtconcurrent/wordcount里的。
第一个问题:4处,为什么startDir为 "../../"时,names为()?
第二个问题:6处,什么时候代码能够执行到这个foreach()?
最好能把这个函数总的讲一下。。。
[解决办法]
第一个问题有点奇怪,"names为 ()" ,意思是names= "()" 么?很奇怪。
因为生成的文件时在debug 或者 release下
理论上是../../的目录对于你是 qtsdk-2009.05/qt/examples/qtconcurrent/
保存到names是,应该是 “../../"+"/"+查找到文件的路径相对路径
第二个问题:
运行完前面一个foreach(查找完本目录)后,
就是后运行这个foreach ,用递归的方法查找子目录。
函数的作用就是在在给定的目录内查找,返回符合filters条件的文件列表(QStringList)
我也是初学者,稍微看了一下这个例子。
[解决办法]
1 ../ 代表父文件夹,然后逻辑想一下
2 前面的qdebug执行完了就行,没有大括号的foreach只管后面的一句
2楼的问题,你可以自己写小程序试试