详解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日

相关文章

  • MAC QT OpenGL 图像 GPUImageLookupFilter

    零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录   >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录   >> OpenGL E…

    C语言 2023年4月18日
    00
  • C程序 查找矩阵定数

    C程序 查找矩阵定数完整使用攻略 介绍 这个程序可以在一个已知的矩阵中查找某个固定的数字。具体的实现方法是通过循环遍历矩阵中的每个元素,并将每个元素和固定数字进行比较,直到找到匹配的元素或遍历完整个矩阵。 用法 1.首先,在你的环境中下载并安装C编译器工具,例如GCC或者CLang。 2.下载本程序的源代码,打开命令行工具,并用C编译器来编译程序。 gcc …

    C 2023年5月9日
    00
  • 全面了解Java中对于异常的捕捉方法

    全面了解Java中对于异常的捕捉方法 在Java中,异常处理是一个非常重要的概念,因为在编写代码时总会遇到一些意外情况,如文件不存在、网络连接断开等等,这些异常的出现会导致程序运行崩溃,无法完成预定任务,影响程序的可靠性和稳定性。Java提供了一套完善的异常处理机制来处理这些异常,可以使程序在出现异常的情况下依然保持正常运行,从而更好地保证程序的正确性。 J…

    C 2023年5月23日
    00
  • vs2019+cmake实现Linux远程开发的方法步骤

    以下是详细讲解“vs2019+cmake实现Linux远程开发的方法步骤”的完整攻略,包括两个示例说明。 一、背景介绍 随着开源技术的普及,越来越多的开发者开始使用Linux系统进行开发。但是,有些Windows操作系统的用户可能会遇到一些困难,比如需要将代码从Windows系统复制到Linux系统中进行编译和运行,或者在Windows系统上开发的代码需要在…

    C 2023年5月23日
    00
  • java 异常之手动抛出与自动抛出的实例讲解

    Java 异常之手动抛出与自动抛出的实例讲解 在 Java 语言中,异常是一个重要的特性,用于处理运行时的错误或异常情况。Java 异常是一个对象,表示在程序执行期间发生的异常情况。在 Java 中,异常通常分为检查异常和非检查异常两种。 异常类型 检查异常:是指在编写程序时必须进行捕获或者在方法中进行抛出声明的异常,例如 IOException、Inter…

    C 2023年5月23日
    00
  • Json.net 常用使用小结(推荐)

    Json.net 常用使用小结(推荐) 什么是 Json.net? Json.net 是一个跨平台的 .NET 库,即使用最广泛的 JSON 库之一,能够处理 JSON 数据的序列化和反序列化。它在 .NET Framework 和 .NET Core 等多个平台上支持序列化和反序列化操作,同时也支持 LINQ、动态编译和对象转换等一系列高级功能。 Json…

    C 2023年5月23日
    00
  • C++中的vector容器对象学习笔记

    C++中的vector容器对象学习笔记 什么是vector容器对象? vector容器对象在C++中被定义为动态数组。它可以容纳许多类类型对象(int、double、bool、char等)。和其他数组不同的是,vector容器对象在创建后,可以根据需要动态地调整大小。这意味着可以动态添加或删除元素。 如何定义并初始化vector容器对象? 定义vector需…

    C 2023年5月23日
    00
  • C/S和B/S两种架构区别与优缺点分析

    C/S和B/S两种架构区别与优缺点分析 C/S架构 C/S架构即客户端/服务器架构,是一种常见的软件架构模式。C/S架构中,客户端负责与用户交互,服务器负责执行核心业务逻辑。C/S架构需要在客户端和服务器端分别安装软件,因此需要专业的IT技能来安装和维护。 优点 可以在本地运行一些比较复杂或计算密集的程序,提高了程序的执行效率。 远程协作能力较强,多个用户可…

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