0

MAC OS X 用のアプリケーションを開発しています。このアプリケーションでは、フォルダー内のファイルを検索する必要があります。問題は、ユーザーが快適にファイルを検索できるようにしたいということですQString。この QString は、ファイルの正確な名前またはファイル名に含まれるテキストである可能性があります。ファイル名が"mysamplefile.txt". したがって、ユーザーが次のいずれかを入力した場合'my'; 'mysample'; 'samplefile'; 'mysamplefile'または'mysamplefile.txt'。すべての場合において、そのファイルの を取得したいと考えてQFileInfoいます。また、チェックボックスオプション'Match Case'または'Ignore case'ユーザーが取得できるようにしますfileinfo。ユーザーが検索したい場所とQStringList、ユーザーが選択した場所の があります。だから私はすべてのパス()で各文字列名(から)を検索したい。そして、決勝に進みたいstringsQStringListQStringList strSearchFileNameQStringList searchingdirectorylistQFileInfoList検索プロセス後のすべてのファイルに対して。

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);
            }

        }
    }

}

この機能は、正確な名前のファイルを1つだけ検索した場合にのみ機能します。しかし、正確な名前ではない複数のファイルを検索したい。

4

1 に答える 1

1

再帰関数を使用して (または反復子を使用して)、すべてのファイルとフォルダーを反復処理する必要があります。各反復で、 を使用し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();
}
于 2016-03-04T06:47:30.710 に答える