首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在QDir中搜索文件

如何在QDir中搜索文件
EN

Stack Overflow用户
提问于 2016-03-04 04:23:48
回答 1查看 7.4K关注 0票数 1

我正在为MAC OS开发一个应用程序,在这个应用程序中我必须在文件夹中找到文件。问题是,我想让用户感到舒适,通过输入QString搜索文件。此QString可能是文件的确切名称,也可能是包含在文件name.Suppose中的文本,文件名为"mysamplefile.txt"。因此,如果用户输入'my''mysample''samplefile''mysamplefile''mysamplefile.txt'。在任何情况下,我都希望获得该文件的QFileInfo。我还为用户提供了复选框选项'Match Case''Ignore case'以获取fileinfo。我有一个用于用户想要搜索的QStringListstrings,还有一个用户选择的位置的QStringList。因此,我想在每个路径( QStringList strSearchFileName)中搜索每个字符串名(QStringList searchingdirectorylist)。在搜索过程之后,我想为所有的文件做一个最后的QFileInfoList

代码语言:javascript
运行
复制
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);
            }

        }
    }

}

只有当我只搜索一个具有确切名称的文件时,此函数才对我起作用。但我想要搜索多个文件的名字不准确。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-04 06:47:30

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

代码语言:javascript
运行
复制
#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();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35787944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档