QDir, QFileInfo 和 QDirIterator 区别

简介:

这三个类相互有关联,但是有不尽相同,首先从名字上看,QDir 和 QDirIterator 是针对于文件目录的,也就是文件夹,我们知道,对于一个文件夹,可以包含很多文件,也可以包含其他文件夹,通常是一个树的结构。文件夹里还可以包含符号链接,符号链接是指向其他文件或文件夹的一种链接,和Windows系统中的快捷方式有些类似,具体可参考这里。而QFileInfo主要是针对某一个具体的文件,来保存和这个文件相关的所有信息,比如文件名,路径啥的。下面来看一个例子,是通过递归方法来查询所有.mp3文件:

void recurseAddDir(QDir d, bool recursive=true, bool symlinks=false ) {
    d.setSorting( QDir::Name );
    QDir::Filters df = QDir::Files | QDir::NoDotAndDotDot;
    if (recursive) df |= QDir::Dirs;
    if (not symlinks) df |= QDir::NoSymLinks;
    QStringList qsl = d.entryList(df, QDir::Name | QDir::DirsFirst);
    foreach (const QString &entry, qsl) {
        QFileInfo finfo(d, entry);
        if ( finfo.isDir() ) {
            QDir sd(finfo.absoluteFilePath());
            recurseAddDir(sd);
        } else {
            if (finfo.completeSuffix()=="mp3")
                addMp3File(finfo.absoluteFilePath()); 
        }
    }
}

上面那个例子在递归函数recurseAddDir()中调用了功能函数addMp3File(),严重的限制了该函数的可重用性,下面来看用Iterator Pattern来实现的版本:

int main (int argc, char* argv[]) {
    QCoreApplication app(argc, argv);
    QDir dir = QDir::current();
    if (app.arguments().size() > 1) {
        dir = app.arguments()[1];
    }
    if (!dir.exists()) {
        cerr << dir.path() << " does not exist!" << endl;
        usage(); 
        return -1;
    }
    QDirIterator qdi(dir.absolutePath(),
            QStringList() << "*.mp3",
            QDir::NoSymLinks | QDir::Files,
            QDirIterator::Subdirectories );
    while (qdi.hasNext()) {
        addMp3File(qdi.next());
    }
}

本文转自博客园Grandyang的博客,原文链接:QDir, QFileInfo 和 QDirIterator 区别,如需转载请自行联系原博主。

相关文章
|
SQL 缓存 JSON
vue利用级联选择器实现全国省市区乡村五级菜单联动
vue利用级联选择器实现全国省市区乡村五级菜单联动
|
存储 自然语言处理 搜索推荐
ChatGPT 文本Embedding融合Qdrant向量数据库:构建智能问答系统的技术探索
向量数据库结合ChatGPT带来了什么 1. **语义搜索:** 使用向量数据库进行语义搜索,可以更准确地找到与查询相关的信息。ChatGPT可以理解用户的自然语言查询,而向量数据库可以根据语义相似性返回匹配的向量数据。 2. **智能推荐:** 结合ChatGPT的智能理解和向量数据库的相似性搜索,可以实现更智能的推荐系统。系统可以根据用户的历史行为和语境,向用户推荐相似的向量数据,如文章、产品或其他内容。 3. **自然语言处理与向量表示结合:** ChatGPT可以将自然语言转换为向量表示,这样就可以在向量数据库中进行更高效的查询。这种集成使得自然语言处理和向量数据库可以相互补充等
1002 0
ChatGPT 文本Embedding融合Qdrant向量数据库:构建智能问答系统的技术探索
|
API
FFmpeg中AVPacket、AVFrame结构的基本使用
FFmpeg中AVPacket和AVFrame结构的内存分配、释放和引用计数处理,以及如何避免内存泄漏。
379 3
|
9月前
|
人工智能 自然语言处理 安全
探秘能源行业AI密码:云鼎科技用大模型实现了″四个转变″
大模型正全面赋能流程工业与智能制造。以煤矿行业为例,云鼎科技自2022年起探索大模型应用,从验证到研发再到推广,构建了“1+4+N”智能化方案,实现115类场景落地,并拓展至化工、电力等领域。大模型带来“四个改变”:由被动监管转向本质安全、劳动密集转向精简高效、粗放管理转向质量效益、分散重复转向集约高效。实际成效显著,如兴隆庄煤矿减少岗位人员39人,济宁二号井煤矿每年增利400多万。云鼎科技还基于DeepSeek等模型打造垂域矿山大模型,推动全产业智能化升级,助力企业轻松算清经济账,吸引更多企业拥抱大模型浪潮。
168 0
|
机器学习/深度学习 算法 算法框架/工具
改进的yolo目标检测(yolo创新与改进)
改进的yolo目标检测(yolo创新与改进)
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
消息中间件 监控 数据处理
消息队列和应用工具产品体系-APM 系统简述和架构演化
消息队列和应用工具产品体系-APM 系统简述和架构演化
|
传感器 数据可视化 数据管理
SolidWorks2021中文版【Solid Works 附补丁】完美破解版下载 安装教程
SolidWorks2021中文版【Solid Works 附补丁】完美破解版下载 安装教程
SolidWorks2021中文版【Solid Works 附补丁】完美破解版下载 安装教程
|
自然语言处理 API 数据安全/隐私保护
通过阿里云Milvus和通义千问快速构建基于专属知识库的问答系统
本文展示了如何使用阿里云向量检索 Milvus 版和灵积(Dashscope)提供的通用千问大模型能力,快速构建一个基于专属知识库的问答系统。在示例中,我们通过接入灵积的通义千问 API 及文本嵌入(Embedding)API 来实现 LLM 大模型的相关功能。
通过阿里云Milvus和通义千问快速构建基于专属知识库的问答系统
|
供应链 搜索推荐 物联网
云上智能供应链:重塑物流与供应链管理的未来图景
云上智能供应链作为供应链管理领域的创新实践,正以其独特的优势和潜力引领着供应链管理的未来发展。通过数字化、智能化和集成化的手段,云上智能供应链不仅提升了供应链的整体效能和竞争力,还为企业带来了更多的商业价值和市场机遇。我们有理由相信,在未来的日子里,云上智能供应链将成为推动企业转型升级和实现可持续发展的重要力量。
1937 0