C/C++获取路径下所有文件及其子目录的文件名

2023-05-16

一、功能描述

需要提取某个文件夹下所有文件名字,当包含子目录时,将子目录及其路径获取到。

二、实现方式

使用C语言的opendir函数

  DIR* dp;
  struct dirent* dirp;
  if ((dp = opendir(sdir.c_str())) != NULL) {
      dirp = readdir(dp)
  }

通过readir读取到的dirp中包含的d_type具有如下类型及其含义:

enum
  {
    DT_UNKNOWN = 0,
# define DT_UNKNOWN	DT_UNKNOWN
    DT_FIFO = 1,
# define DT_FIFO	DT_FIFO
    DT_CHR = 2,
# define DT_CHR		DT_CHR
    DT_DIR = 4,
# define DT_DIR		DT_DIR
    DT_BLK = 6,
# define DT_BLK		DT_BLK
    DT_REG = 8,
# define DT_REG		DT_REG
    DT_LNK = 10,
# define DT_LNK		DT_LNK
    DT_SOCK = 12,
# define DT_SOCK	DT_SOCK
    DT_WHT = 14
# define DT_WHT		DT_WHT
  };
  • 参考官方文档可知

DT_UNKNOWN ¶
The type is unknown. Only some filesystems have full support to return the type of the file, others might always return this value.
未知类型
DT_REG
A regular file. 常规文件
DT_DIR
A directory. 目录

DT_FIFO
A named pipe, or FIFO. See FIFO Special Files.

DT_SOCK
A local-domain socket. 套接字文件

DT_CHR
A character device. 字符设备

DT_BLK
A block device. 块设备,比如挂载的硬盘之类

DT_LNK
A symbolic link. 链接文件

三、代码实现

  • 通过递归的方式,获取该目录及其子目录下的所有文件及其路径名
#include <dirent.h>
#include <vector>
/**
 * @brief GetFiles: 获取文件夹内的所有文件名字
 * @param sdir
 * @param bsubdir: true 包含子目录下的文件
 * @return
 */
std::vector<std::string> GetFiles(const std::string& sdir = ".",
                                  bool bsubdir = true) {
  DIR* dp;
  struct dirent* dirp;
  std::vector<std::string> filenames;
  if ((dp = opendir(sdir.c_str())) != NULL) {
    while ((dirp = readdir(dp)) != NULL) {
      if (strcmp(".", dirp->d_name) == 0 || strcmp("..", dirp->d_name) == 0)
        continue;
      if (dirp->d_type != DT_DIR)
        filenames.push_back(sdir + "/" + dirp->d_name);
      if (bsubdir && dirp->d_type == DT_DIR) {
        std::vector<std::string> names = GetFiles(sdir + "/" + dirp->d_name);
        filenames.insert(filenames.begin(), names.begin(), names.end());
      }
    }
  }
  closedir(dp);
  return filenames;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++获取路径下所有文件及其子目录的文件名 的相关文章

  • PHP常用的设计模式

    php常用的设计模式 xff1a 1 单例模式 xff08 构造方法私有化 xff0c 对外提供实例化对象的静态调用方法 xff09 class Site span class token punctuation span public s
  • 003.多线程-主线程、守护线程、用户线程的区别

    对于线程的分类 xff0c 我们可以简单划分为 xff1a 主线程 xff08 每个进程只有一个主线程 xff09 子线程 主线程 xff1a main方法 子线程 xff1a 非主线程皆是子线程 子线程中可以简单划分为 xff1a 守护线
  • Ubuntu中在当前目录下打开终端

    在Ubuntu中 xff0c 打开终端可以通过Ctrl 43 Alt 43 T来打开 xff0c 但其打开的是 下的 xff0c 如果进入指定的目录 xff0c 便需要通过cd命令来进行切换 xff0c 故本文提供一个可以通过鼠标右键来在当
  • C语言经典面试题100道(校对详解版)

    题目非本人整理 xff0c 转载于https blog csdn net qq 42613510 article details 81225935 做了校对与详解 xff0c 方便大家参考 最后编程答案自己做的 xff0c 还没写完 xff
  • 浅谈FreeRTOS任务启动与切换流程

    一个轻量级操作系统最核心的地方就在于任务的执行与切换 xff0c 像FreeRTOS和ucOS 在任务启动与切换方面都差不多 xff0c 本文主要从枝干而省去了所有细枝末节让你最快的了解操作系统的任务创建与切换 以正点原子FreeRTOS移
  • 状态机编程思维学习笔记(C语言)

    前言 不摸鱼摆烂的第一天 目录 前言C语言面对对象特性引入函数指针结构体中套用函数指针宏定义中 纯替换 状态机概念状态机实现后文 C语言面对对象特性引入 众所周知 xff0c C 43 43 是由C语言编写而成 xff0c 因此 xff0c
  • stm32串口中断收发数据环形缓冲区的设计

    Function Name USART2 IRQHandler Description This function handles USART2 global interrupt request Input None Output None
  • 多线程的守护线程和等待线程结束方法

    守护线程的含义是 xff1a 如果当前运行的所有线程都是守护线程 xff0c 则程序直接结束 package thread 64 ClassName Test7 64 Author 瞿肖 64 Date 2022 7 11 14 32 pu
  • 用数学规划的方式求解优化问题

    本文介绍如何用数学语言对实际中的优化问题进行建模 通过建立数学模型 我们利用现成的求解器可以便捷地计算出最优解 或可行解 运输问题 考虑三个粮食储量分别是100 200 300的仓库 单位 吨 下文省略 我们需要把粮食运送给4个客户 其需求
  • 操作系统磁盘管理

    文章目录 01 知识概述部分02 课程知识回顾说明03 磁盘管理知识体系结构04 磁盘管理物理结构05 磁盘管理分区操作问题 xff1a 新添加硬盘无法识别 分区操作1 xff1a fdisk xff08 操作时可看10点的视频 xff09
  • ROS学习——Rviz(更新中)

    固定架 两个框架中最重要的是固定框架 固定框架是用于表示 世界 框架的参考框架 这通常是 地图 或 世界 或类似名称 xff0c 但也可以是例如里程表框架 如果将固定框架错误地设置为例如机器人的底座 xff0c 则机器人曾经见过的所有物体都
  • Boost型Ladrc控制双闭环电路 双闭环控制

    Boost型Ladrc控制双闭环电路 双闭环控制 xff08 1 xff09 电压外环采用简化Ladrc控制器 xff0c 简化线性自抗扰控制 xff0c 采用PD控制 43 三阶LESO状态观测器 xff0c xff08 2 xff09
  • 【STM32】HAL库——串口中断通信(二)

    由于调试过程中发现Proteus 8有些许bug xff0c 串口中断采用STM32F103RCT6开发板进行讲解 前期准备 xff1a STM32CubeMXSTM32F103RCT6开发板IDE Keil xff08 MDK ARM x
  • Detected problems with API compatibility...修复

    Detected problems with API compatibility 修复 一 xff0c Detected problems with API 问题产生 博主接手年代过于老旧项目 xff0c 在最新安卓版本P等都会出现该弹窗提
  • docker 标记(Tag),推送(push),拉取(pull)你自己的镜像

    链接 https blog csdn net jpiverson article details 50731568 里面的有很详细的步骤和见解 1 输入docker images命令来查看当前的镜像列表 2 找到镜像的id 3 使用IMAG
  • ASSERT: "false" in file qasciikey.cpp, line 501

    pycharm利用moba xterm的x server远程开发 xff0c 在用cv2显示图片时报错 xff1a ASSERT 34 false 34 in file qasciikey cpp line 501 代码 xff1a cv2
  • nvidia-smi命令输出结果缓慢

    可能的原因和解决办法 xff1a 当前已经打开了节能模式 xff08 需要关闭节能模式 xff0c 切换到持久模式 xff09 如何关闭节能模式 xff1a span class token comment 修改或创建配置文件 span s
  • ESP8266深度学习之一初识设备

    一 ESP8266是什么 xff1f 总的来说ESP8266是一款单片机 xff0c 而且是一款自带WIFI功能的单片机 它是安信可公司众多单片机中的一种 xff0c 同时它也有很多种型号可以供我们选择使用 二 ESP8266有什么特点 x
  • 什么是RTK?

    国内习惯把GNSS接收机叫成RTK这倒是真的 xff0c 因为RTK技术的普及 xff0c 让大家对接收机的作用就 限定 在了RTK xff0c 在之前没有RTK时 xff0c 接收机就是接收机 目前 xff0c GNSSj接收机约99 的

随机推荐

  • STM32F103VCT6 高级定时器的PWM输出

    要求得到下列波形 xff0c 死区时间1us CH1和CH1之间的相位差事3us 频率50HZ 1 xff0c To get TIM1 counter clock at 72MHz the prescaler is computer as
  • 计算机视觉(相机标定;内参;外参;畸变系数)

    目录 一 预备知识 1 坐标系变换过程 xff08 相机成像过程 xff09 xff08 1 xff09 相机坐标系转换为图像坐标系 xff08 透视投影变换遵循的是针孔成像原理 xff09 xff08 2 xff09 齐次坐标的引入原因
  • ROS基础(2)——工作空间

    一 工作空间 1 工作空间的概念 ros工作空间简单来说相当于工程或者项目 xff0c 编写ros程序之前 xff0c 首先需要创建ros工作空间 2 创建工作空间 span class token function mkdir span
  • Ubuntu18.04完整新手安装教程和分区设置

    作者PS xff1a 好久没关注blog了 xff0c 居然这么多同学看了这篇文章 xff1a xff09 注意注意 xff1a 以下是关键总结 xff1a 分区 xff1a 这三个就够了 xff1a xff0c home xff0c sw
  • ROS基础(4)——安装ROS相关软件包

    一 ROS的两种安装方式 本章将会通过两种安装方式安装ROS相关软件包 分别是 xff1a 通过apt方式安装RoboWare Studio 通过下载源码编译的方式安装安装ROS Academy for Beginners教学包 这是两种常
  • arm与51单片机之间串口通信实验

    这几天弄arm的串口通信 xff0c 因为以前有点单片机的基础 xff0c 于是 就选了块51单片机与其实验 实验内容是在linux下编写好串口通信程序 xff0c 编译后下载到arm板上运行 xff0c 验证其可行性 linux下串口程序
  • ROS源代码阅读(8)——定位

    2021SC 64 SDUSC ROS源代码阅读 xff08 8 xff09 SLAM定位 xff1a 机器人定位的方法可以分为非自主定位与自主定位两大类 非自主定位是在定位的过程中机器人需要借助机器人本身以外的装置如 xff1a 全球定位
  • 博途V15

    西门子 博途V15仿真报错 WIN10虚拟机安装博途V15 xff0c 仿真时出现如下报错 无法找到STEP 7 V15许可证 开始以为是许可证问题 xff0c 找了18和19的Sim EKB Install进行激活 xff0c 但是并没有
  • Jetson TX2入门之开箱刷机跑demo

    Jetson TX2 开箱配置 43 刷机 43 跑demo xff08 常见坑总结 xff09 简介 JetSon系列是Nvidia公司推出的面向无人智能化领域的嵌入式平台 xff0c 这块嵌入式板子的出现使得我们可以在边缘设备上处理复杂
  • 集成显卡安装pytorch

    Inter集成显卡安装pytorch 安装pytorch 计算机右键 管理 gt 设备显示器 gt 显示适配器 xff0c 查看显卡 我的电脑只有Inter的集成显卡 xff0c 没有独显 刚开始接触 xff0c 对GPU不懂 xff0c
  • ROS可视化动态查看所有topic的频率/带宽/消息类型/数值

    在程序运行或者回放数据包时 xff0c 希望实时查看到所有的正在向外发送的topic名字 类型 带宽 频率 数值等 除了rostopic list以外还可使用rqt辅助包 打开rqt rqt 选择Plugins插件 Topics信息 top
  • PID与MPC控制方法

    记录udacity 无人驾驶工程师课程中控制部分 MPC代码和实践链接https github com udacity CarND MPC Quizzes 本文按照对udacity课程的理解和翻译而来 1 PID P xff1a Propo
  • C++STL容器及其优缺点介绍

    STL容器介绍及选择方式 容器类型容器优缺点一 序列容器vectordequelistforward list xff08 C 43 43 11 xff09 queuepriority queue stackarray 二 关联容器setm
  • word中插入noteExpress和页码出现乱码解决方法

    在word中出现页码变成PAGE MERGEFORMAT xff0c noteExpress插入的代码也变成了乱码 打开出问题的word文档 xff0c 按照如下设置 xff1a 文件 选项 高级 显示文档内容 不勾选显示域代码而非阈值 修
  • FreeRTOS内核实现04:空闲任务与阻塞延时

    目录 1 引入原因 2 实现空闲任务 2 1 定义空闲任务组件 2 2 创建空闲任务 3 实现阻塞延时 3 1 vTaskDelay函数实现 3 2 修改vTaskSwitchContext函数 3 3 SysTick初始化函数实现 3 4
  • NoteExpress对参考文献格式修改

    文章目录 NoteExpress格式修改1 将带DOI的模板另存为 Revised GBT 7714 20152 编辑自定义的nes文件3 保存选择使用 NoteExpress参考文献格式修改规则GTB 7714 2015下载 NoteEx
  • ubuntu Nvidia显卡驱动安装后 屏幕不能外接显示(扩展显示)的问题

    文章目录 结论安装历程问题详细描述解决方法 结论 配置文件 etc X11 xorg conf未正确配置 xff0c 安装历程 安装显卡驱动后 xff0c 依旧无法正常扩展屏幕显示 xff0c 仔细一看发现在nvidia smi时出现No
  • ubuntu 16.04无法locate boot-repair的解决方法

    ubuntu16 04 07加windows10后无法启动ubunu的问题解决boot repair的安装方法同样适用于ubuntu18 04 ubuntu20 01等系统不能启动的问题 对boot repair修复的原理进行分析 文章目录
  • 论文降低word大小——图像免费压缩方法

    在期刊和毕业论文提交盲审过程中 xff0c 时常对word和pdf的大小进行限制 xff0c 但是在多图的论文中 xff0c 将大小限制在20MB以内较为困难 梳理以下两种方法 xff1a 1 visio图片大小压缩 visio图片插入到w
  • C/C++获取路径下所有文件及其子目录的文件名

    一 功能描述 需要提取某个文件夹下所有文件名字 xff0c 当包含子目录时 xff0c 将子目录及其路径获取到 二 实现方式 使用C语言的opendir函数 DIR span class token operator span dp spa