c++遍历文件夹下指定后缀的文件

dirent.h

dirent.h是一个头文件,它包含了在文件系统中进行目录操作的函数和数据结构的声明。

以下是一些dirent.h头文件中常用的函数和数据结构:

  1. DIR结构体:表示一个目录流,用于操作目录。
  2. struct dirent结构体:表示一个目录项,包含文件名和文件类型等信息。
  3. opendir函数:打开一个目录流,并返回一个指向 DIR 结构体的指针。
  4. readdir函数:读取目录流中的下一个目录项,并返回一个指向 struct dirent 结构体的指针。
  5. closedir函数:关闭一个目录流。

利用dirent遍历目录并获取目录中的条目信息

代码示例如下,

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>#define MAX_FILENAME_LENGTH 256void processFiles(const char* folderPath) {DIR* directory;struct dirent* entry;directory = opendir(folderPath);if (directory == NULL) {printf("Failed to open the folder.\n");return;}while ((entry = readdir(directory)) != NULL) {if (entry->d_type == DT_REG) {char filePath[MAX_FILENAME_LENGTH];snprintf(filePath, sizeof(filePath), "%s/%s", folderPath, entry->d_name);char* extension = strrchr(entry->d_name, '.');if (extension != NULL && strcmp(extension, ".jpg") == 0) {printf("File Path: %s\n", filePath);}}}closedir(directory);
}int main() {const char* dataFolder = "C:\\Users\\reconova\\Desktop\\data_folder";processFiles(dataFolder);return 0;
}

首先,打开指定路径的目录,并将目录流(DIR*类型)赋值给directory变量,

DIR* directory;
struct dirent* entry;
directory = opendir(folderPath);

接下来,遍历目录中的条目,并检查每个条目的类型是否为普通文件(regular file),

(entry = readdir(directory)) != NULL;
(entry->d_type == DT_REG);

随后,构建文件的绝对路径,

char filePath[MAX_FILENAME_LENGTH];// 使用snprintf()函数将文件的完整路径格式化为字符串,并将结果存储在filePath数组中。snprintf()函数类似于printf()函数,但它可以指定输出字符串的最大长度,以避免缓冲区溢出。它接受多个参数,其中包括格式化字符串和要格式化的值
snprintf(filePath, sizeof(filePath), "%s/%s", folderPath, entry->d_name);

最后,获取文件名的后缀,并判断是否为需要的文件,

// strrchr用于在一个字符串中查找指定字符的最后一次出现的位置,并返回该位置的指针
char* extension = strrchr(entry->d_name, '.');// strcmp用于比较两个字符串的内容是否相同
extension != NULL && strcmp(extension, ".jpg") == 0;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】细数Linux和Android系统中的伪文件系统

文章目录 前言Linux伪文件系统cgroupfsLinux的cgroupsAndroid的cgroups debugfsfunctionfs(/dev/usb-ffs/adb)functionfs 的引入sysfs是什么 procfs(/proc)pstore(/sys/fs/pstore)selinuxfs(/sys/fs/selinux)sysfs(/sys)参考 前言 做了好些年Android开发&#xff0c;你了解过L…

Java Web(二)--HTML

基本介绍 官网文档地址: HTML 教程 HTML&#xff08;HyperText Mark-up Language&#xff09;即超文本标签语言&#xff1b;HTML 文本是由 HTML 标签组成的文本&#xff0c;可以包括文字、图形、动画、声音、表格、链接等&#xff1b;HTML 的结构包括头部&#xff08;Head&…

《动手学深度学习(PyTorch版)》笔记1

Chapter1 Introduction 机器学习的关键组件 data 每个数据集由一个个样本&#xff08;example, sample&#xff09;组成&#xff0c;大多时候&#xff0c;它们遵循独立同分布(independently and identically distributed, i.i.d.)。 样本有时也叫做数据点&#xff08;data po…

学校“数据结构”课程Project—扩展功能(自主设计)

目录 一、设想功能描述 想法缘起 目标功能 二、问题抽象 三、算法设计和优化 1. 易想的朴素搜索 / dp 搜索想法 动态规划&#xff08;dp&#xff09;想法 2. 思考与优化 四、算法实现 五、结果示例 附&#xff1a;使用的地图API 一、设想功能描述 想法缘起 OSM 导出…

汽车网络架构与常用总线汇总

汽车CAN总线简述 CAN 是控制器局域网Controller Area Network 的缩写&#xff0c;1986年&#xff0c;由德国Bosch公司为汽车开发的网络技术&#xff0c;主要用于汽车的监测与控制&#xff0c;目的为适应汽车“减少线束的数量”“通过多个网络进行大量数据的高速传输”的需求。…

TA百人计划学习笔记 3.1.1模板测试

资料 源视频 【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例_哔哩哔哩_bilibili ppt 3100-模板测试与深度测试(1) 参考 Unity Shader: 理解Stencil buffer并将它用于一些实战案例&#xff08;描边&#xff0c;多边形填充&#xff0c;反射区域限定&#xff0c;阴影…

c++学习笔记-STL案例-机房预约系统6-老师模块

前言 衔接上一篇“c学习笔记-STL案例-机房预约系统5-学生模块”&#xff0c;本文主要设计老师模块&#xff0c;从&#xff0c;老师登录和注销、查看所有预约、审核预约三个方面进行分析和实现。 目录 9 教师模块 9.1 教师登录和注销 9.1.1 构造函数 9.1.2 教师子菜单 ​编…

Linux7 安装 Oracle 19C RAC 详细图文教程

实战篇&#xff1a;Linux7 安装 Oracle 19C RAC 详细图文教程 本文是按照&#xff1a;https://www.modb.pro/db/154424的思路进行编写 一、安装前规划 安装RAC前&#xff0c;当然要先做好规划。具体包含以下几方面&#xff1a; 节点主机版本主机名实例名Grid/Oracle版本Publi…

鸿蒙原生开发-仿ChatGPT应用实战

运行环境 DAYU200:4.0.10.16 SDK&#xff1a;4.0.10.15 IDE&#xff1a;4.0.600 前言 在配置好环境之后&#xff0c;可以尝试这编写一个较为简单的应用程序练练手&#xff0c;这里选择使用一个免费的API接口网站 ALAPI来尝试编写一个可进行对话的GPT应用程序。 创建项目 …

SQL注入示例

例一、基础SQL注入&#xff1a;load_file读文件 CISP-PTE 认证考试 首先是有单引号和括号的&#xff0c;首要是要闭合&#xff0c;然后回显点是在-1的位置&#xff0c;读取文件上面的key的话使用的是load_file(/tmp/360/key) id-1)%09ununionion%09select%091,2,3,load_file…

【算法与数据结构】322、LeetCode零钱兑换

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题可以抽象成一个完全背包问题。 第一步&#xff0c; d p [ j ] dp[j] dp[j]的含义。 d p [ j ] dp…

Unity之Cinemachine教程

前言 Cinemachine是Unity引擎的一个高级相机系统&#xff0c;旨在简化和改善游戏中的相机管理。Cinemachine提供了一组强大而灵活的工具&#xff0c;可用于创建令人印象深刻的视觉效果&#xff0c;使开发人员能够更轻松地掌控游戏中的摄像机行为。 主要功能和特性包括&#x…

用Python画出漂亮的地图

用Python画出漂亮的地图 地图可视化是数据分析和地理信息系统中的重要环节。Python提供了多个强大的库&#xff0c;如Folium、Matplotlib、Geopandas等&#xff0c;使得创建漂亮而具有信息量的地图变得简单而灵活。本文将详细介绍如何使用这些库绘制漂亮的地图&#xff0c;并提…

C++ STL库详解:list的详细模拟实现

一、前言 在详细学习并学习c后&#xff0c;我们对stl库的例如vector、list、string都有了详细的了解&#xff0c;对模板的使用以及类和对象都有了熟练的掌握&#xff0c;而实践才是检验真理的唯一标准&#xff0c;在此片博客中&#xff0c;将利用先前学过的各模块知识来对list…

Springboot+vue的医院后台管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的医院后台管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的医院后台管理系统&#xff0c;采用M&#xff08…

Java实现 OPC Ua Server服务器创建

前言 我们除了使用KEPServerEX6 创建OPC Ua Server 服务器以外,还可以使用 开源项目org.eclipse.milo 创建一个java项目OPC Ua Server的服务。相对于KEPServerEX6 属于收费的商用版本来说,后者更为简单轻便。下面附加代码和文字说明,教你如何创建一个OPC Ua Server的java服…

vue多层组件监听 v-bind=“$attrs“,v-on=“$listeners“

高层级向低层级传值 v-bind“$attrs” v-bind"$attrs"主要用于高层组件向低层组件隔代传值。 假如有 父组件A&#xff0c;子组件B&#xff0c;孙组件C 三个组件。 A组件中的值需要直接传给C组件&#xff0c;那么就需要在B组件中设置v-bind“$attrs”&#xff0c;然…

LeetCode、875. 爱吃香蕉的珂珂【中等,最小速度二分】

文章目录 前言LeetCode、875. 爱吃香蕉的珂珂【中等&#xff0c;最小速度二分】题目及分类思路分析及代码实现代码优化 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Ja…

如何修改flutter的minSdkVersion版本?

在使用第三方插件的时候&#xff0c;插件对最低的 minSdkVersion版本是有要求的&#xff0c;你比如flutter 插件 webview_flutter 就会报一下错&#xff1a; minSdkVersion 16 cannot be smaller than version 19 declared in library 解决方法①&#xff1a; 这个时候我们需…

Flutter 屏幕适配之相对尺寸适配

在Android中我们可以通过脚本来动态生成适配于各个厂商的屏幕的相对尺寸。 那么在Flutter中我们如何通过相同的思路来实现同样的效果呢&#xff1f;我们知道&#xff0c;Android的每个厂商的屏幕大小存在非常大区别。有些长&#xff0c;有的短&#xff0c;有的粗&#xff0c;有…