2016-03-04 28 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

相關問題