2012-11-08 42 views
0

从递归搜索目录返回正确的值时出现问题。该代码是下面递归搜索返回错误值的目录

#include <QCoreApplication> 
#include <QDir> 
#include <QString> 

#include <QDebug> 

static QString findDirectoryPathFromId(const QString &startPath, const QString &id) 
{ 
    QDir dir(startPath); 

    QFileInfoList list = dir.entryInfoList(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); 

    QString path; 

    foreach(QFileInfo dinfo, list) 
    { 
     if (dinfo.fileName() == id) 
     { 
      qDebug() << "****************Found****************" << dinfo.filePath(); 
      return dinfo.filePath(); 

     } 

     else 
     { 
      findDirectoryPathFromId(dinfo.absoluteFilePath(), id); 
     } 

    } 

return QString(); 

} 


int main(int argc, char *argv[]) 
{ 
    QCoreApplication app(argc, argv); 

    QStringList args = app.arguments(); 

    QString path = findDirectoryPathFromId("/home/project/dirtest", args.at(1)); 

    qDebug() << "Return path" << path; 

    return 0; 
} 

的函数查找目录为“找到”调试语句被打印,但是返回的值是空字符串。

有人可以解释我在这里做错了什么。

谢谢

回答

0

我想我已经修好了。

我需要检查递归调用是否已找到目录并将其返回。

path = findDirectoryPathFromId(dinfo.absoluteFilePath(), id); 

     if (!path.isNull()) 
      return path; 

这是正确的。