2016-03-04 66 views
0

我开发MAC OS X中,我必须找到文件夹中文件的应用程序。问题是,我想让用户通过输入QString来搜索文件。此QString可能是文件的确切名称或文件名中包含的文本。假设文件名为"mysamplefile.txt"。所以如果用户输入'my'; 'mysample'; 'samplefile'; 'mysamplefile''mysamplefile.txt'。在所有情况下,我想获得该文件的QFileInfo。我也给复选框选项'Match Case''Ignore case'用户获得fileinfo。我有用户想搜索,我也有由用户选择的位置的QStringListstrings一个QStringList。所以,我想在每一个路径(QStringList searchingdirectorylist)搜索每个字符串名称(从QStringList strSearchFileName)。我想在搜索过程后为所有文件做最后的QFileInfoList如何搜索一个文件中的QDir

void MainWindowWipe::onSearchingProcess(QStringList strSearchFileName, QStringList searchingdirectorylist) 
{  
    for(int i=0; i<strSearchFileName.size();i++) 
    { 
     for(j=0; j<searchingdirectorylist.size();j++) 
     { 
      QDir dir(searchingdirectorylist[j]); 
      dir.setNameFilters(QStringList(strSearchFileName[i])); 
      dir.setFilter(QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks); 

      QFileInfoList fileList = dir.entryInfoList(); 
      for (int k=0; k<fileList.count(); k++) 
      { 
       QString temp = ""; 
       temp = fileList[k].absoluteFilePath(); 

      } 

      dir.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); 
      QStringList dirList = dir.entryList(); 
      QStringList newList;  
      for (int l=0; l<dirList.size(); ++l) 
      { 
       QString newPath = QString("%1/%2").arg(dir.absolutePath()).arg(dirList.at(i)); 
       newList<<newPath; 

       onSearchingProcess(strSearchFileName,newList); 
      } 

     } 
    } 

} 

只有当我只搜索一个具有确切名称的文件时,此函数不适用于本工作。但是我想用不确切的名字搜索多个文件。

回答

0

你需要使用递归函数通过所有文件和文件夹进行迭代(或使用迭代器)。在每次迭代中,您都可以使用QString::contains()来确定文件的名称是否包含目标字符串。将每个匹配的文件名保存在一个列表中。

#include <QCoreApplication> 
#include <QDebug> 
#include <QDirIterator> 

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

    QString targetStr = "init"; // What we search for 
    QFileInfoList hitList; // Container for matches 
    QString directory = "D:/python/"; // Where to search 
    QDirIterator it(directory, QDirIterator::Subdirectories); 

    // Iterate through the directory using the QDirIterator 
    while (it.hasNext()) { 
     QString filename = it.next(); 
     QFileInfo file(filename); 

     if (file.isDir()) { // Check if it's a dir 
      continue; 
     } 

     // If the filename contains target string - put it in the hitlist 
     if (file.fileName().contains(targetStr, Qt::CaseInsensitive)) { 
      hitList.append(file); 
     } 
    } 

    foreach (QFileInfo hit, hitList) { 
     qDebug() << hit.absoluteFilePath(); 
    } 

    return a.exec(); 
} 
+0

感谢兄弟,它的工作对我来说 – rohit