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

获取一个文件夹下的所有文件及其子目录的文件名可以通过递归遍历文件夹来完成。以下是几个示例代码,演示如何实现这个功能。

方法一:使用C++17中的std::filesystem

基于C++17标准,可以使用std::filesystem库来遍历目录。下面是示例代码:

#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;

void walk_directory(const fs::path& path) {
  for (const auto& entry : fs::directory_iterator(path)) {
    if (entry.is_directory()) {
      walk_directory(entry.path());
    } else {
      std::cout << entry.path() << std::endl;
    }
  }
}

int main() {
  walk_directory("/path/to/directory");
  return 0;
}

上述代码定义了一个函数walk_directory,用于遍历指定目录下的所有文件和子目录。如果遍历到的是子目录,则递归遍历子目录,否则输出文件名。

方法二:使用C语言和POSIX标准库

如果不支持C++17或者希望使用C语言实现,可以使用POSIX标准库中的dirent.h头文件。下面是示例代码:

#include <stdio.h>
#include <dirent.h>
#include <string.h>

void walk_directory(const char *dir) {
    DIR *dp;
    struct dirent *entry;
    if ((dp = opendir(dir)) == NULL) {
        fprintf(stderr, "Cannot open directory: %s\n", dir);
        return;
    }
    chdir(dir);
    while ((entry = readdir(dp)) != NULL) {
        if (entry->d_type == DT_DIR) {
            if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
                continue;
            }
            printf("%*s[%s]\n", 4, "", entry->d_name);
            char subdir[1024];
            snprintf(subdir, sizeof(subdir), "%s/%s", dir, entry->d_name);
            walk_directory(subdir);
        } else {
            printf("%*s- %s\n", 4, "", entry->d_name);
        }
    }
    chdir("..");
    closedir(dp);
}

int main() {
    walk_directory("/path/to/directory");
    return 0;
}

上述代码实现了遍历指定目录下的所有文件和子目录,并输出它们的相对路径。如果遇到子目录,则递归遍历子目录。需要注意的是,这种方法需要手动改变当前工作目录,同时也无法返回文件的绝对路径。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C/C++如何获取路径下所有文件及其子目录的文件名 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • VScode配置C语言环境完整版(亲测可用)

    以下是“VScode配置C语言环境完整版(亲测可用)”的完整攻略: 步骤一:安装MinGW编译器 访问MinGW官网(https://sourceforge.net/projects/mingw-w64/),下载适合自己操作系统版本的MinGW编译器安装程序,并进行安装。 打开安装目录下的bin文件夹,并将其中的mingw32-make.exe、gcc.ex…

    C 2023年5月23日
    00
  • C++实现简单通讯录管理系统

    C++实现简单通讯录管理系统攻略 目标 实现一个简单的通讯录管理系统,可以进行添加联系人、删除联系人、修改联系人和显示联系人等操作。程序的主要功能如下: 添加联系人:输入姓名、性别、年龄、电话及地址信息,添加一个联系人信息到通讯录中。 显示联系人:显示通讯录中的所有联系人信息。 删除联系人:输入要删除联系人的姓名,从通讯录中删除该联系人的信息。 查找联系人:…

    C 2023年5月23日
    00
  • C++常对象精讲_const关键字的用法

    C++常对象精讲 当我们创建一个对象时,这个对象具有改变其内部状态的权利。这意味着,我们可以在任何时候改变对象的值。但是,有时候我们想创建一个对象,使其不能改变。这就是所谓的常对象。 在C++中,我们可以使用const关键字来声明常对象,这样我们就不能改变这些对象的值。常对象可以用于防止在程序中意外地改变对象的值。下面是一个示例: class Example…

    C 2023年5月22日
    00
  • java Unsafe详细解析

    Java Unsafe详细解析 简介 Java Unsafe 是 JDK 提供的一个支持直接操作内存、线程、JVM 的类库。由于 Unsafe 操作的是内存,所以它可以绕过 JVM 的安全检查,说白了就是越过了 Java 的限制,直接操作底层内存。不是直接通过 new 实例化对象进行使用,而是通过反射或本地方法调用获取一个实例。 使用 Unsafe 类主要包…

    C 2023年5月23日
    00
  • 基于C语言实现五子棋游戏完整实例代码

    基于C语言实现五子棋游戏完整实例代码攻略 1. 程序概述 五子棋,一种传统的策略性棋类游戏。本文主要介绍使用C语言编写五子棋游戏的实例代码过程。该代码使用了控制台界面实现,基于Windows操作系统。 2. 程序实现 (1)游戏逻辑实现 游戏逻辑设计了游戏的核心模块,包括棋盘的绘制、游戏过程的实时响应、胜负判断等等。游戏逻辑由主函数以及多个子函数组成。 (2…

    C 2023年5月23日
    00
  • C++类中三大函数详解(构造、析构和拷贝)

    下面是对于“C++类中三大函数详解(构造、析构和拷贝)”的完整攻略: 构造函数 定义 构造函数是C++中用来初始化类对象的第一个函数,它的名称与类名相同,没有返回类型,且可以被重载。 特点 构造函数有以下特点: 构造函数在类实例化时自动调用。 构造函数可以被重载,可以有多个不同版本。 构造函数可以带有参数,也可以没有参数。 构造函数可以被派生类隐式调用,但只…

    C 2023年5月22日
    00
  • python访问纯真IP数据库的代码

    Python访问纯真IP数据库的代码完整攻略 纯真IP数据库是一款用于IP地址查询的软件,可以通过输入一个IP地址来查询对应的区域、省份、城市等信息。在Python中,可以通过访问纯真IP数据库来实现这一功能。下面是实现该功能的完整攻略。 步骤一:下载纯真IP数据库 首先需要从纯真官网下载最新版纯真IP数据库,下载后,解压压缩包,可以得到一个名为“QQWry…

    C 2023年5月23日
    00
  • 在1个Matlab m文件中定义多个函数直接运行的操作方法

    在一个 Matlab 的 m 文件中定义多个函数可以大大提高代码的可读性和复用性,以下是操作方法的具体攻略: 在一个 Matlab 的 m 文件中定义多个函数,需要注意每个函数的开头应有相应的函数名和输入/输出参数的定义。例如: function y = func1(x) % This is function 1 y = x + 1; end functio…

    C 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部