21xrx.com
2024-11-22 07:12:15 Friday
登录
文章检索 我的文章 写文章
C++获取文件夹下所有子文件夹的文件名
2023-07-08 14:39:22 深夜i     --     --
C++ 获取文件夹 子文件夹 文件名 遍历

如果你是一位C++开发者并需要获取指定目录下的所有子文件夹的文件名,那么这篇文章就是为你准备的。在C++中,我们可以使用标准库提供的头文件 来实现该功能。

首先,我们需要创建一个函数,这个函数将会扫描传递给它的目录,获取所有子文件夹的文件名并存储到一个容器中。下面是一个示例函数:


#include <dirent.h>

#include <iostream>

#include <vector>

#include <string>

void GetSubDirectories(const std::string& path, std::vector<std::string>& result)

{

  DIR* dir;

  struct dirent* ent;

  if ((dir = opendir(path.c_str())) != NULL) {

    while ((ent = readdir(dir)) != NULL) {

      if (ent->d_type == DT_DIR && ent->d_name[0] != '.') {

        result.push_back(ent->d_name);

      }

    }

    closedir(dir);

  }

}

在上面的函数中,我们首先打开目录,然后使用 readdir() 函数逐一读取目录下的所有子文件夹名称,将其存储在 vector 容器中(这是一个模板类,可以存储任意数据类型,本例中将子文件夹名称存储为 std::string 类型)。

现在,我们已经成功获取了所有子文件夹的名称,但是,我们的目标是获取每个子文件夹下的文件名称。我们需要编写另一个函数来完成这个任务。下面是示例代码:


void GetSubFiles(const std::string& path, std::vector<std::string>& result)

{

  DIR* dir;

  struct dirent* ent;

  if ((dir = opendir(path.c_str())) != NULL) {

    while ((ent = readdir(dir)) != NULL) {

      if (ent->d_type == DT_REG) {

        result.push_back(ent->d_name); // 存储文件名

      }

      else if (ent->d_type == DT_DIR && ent->d_name[0] != '.') {

        std::string new_path = path + "/" + ent->d_name;

        GetSubFiles(new_path, result); // 迭代调用

      }

    }

    closedir(dir);

  }

}

在上面的函数中,我们同样打开目录,并调用 readdir() 函数逐一读取目录下的所有子文件夹和文件名称。当我们发现一个文件时,我们将其名称存储在 vector 容器中。当我们发现一个子文件夹名称时,我们根据子文件夹的路径递归调用自己,以获取该子文件夹下的所有文件名,并将这些文件名称存储在 vector 中。

最后,我们可以编写一个使用上述函数实现目标的 main() 函数。下面是一个示例:


int main()

{

  std::vector<std::string> subdirectories;

  std::vector<std::string> subfiles;

  std::string path = "/path/to/directory"; // 替换为需要扫描的目录路径

  GetSubDirectories(path, subdirectories);

  for (std::string subdir : subdirectories)

  {

    GetSubFiles(path + "/" + subdir, subfiles);

  }

  // 打印所有文件名称

  for (std::string file : subfiles)

  

    std::cout << file << std::endl;

  

  return 0;

}

上面的 main() 函数中,我们首先获取目录下的所有子文件夹名称,然后针对每个子文件夹分别获取其下的所有文件名称,并将这些文件名称存储在 subfiles 容器中。最后,我们迭代该容器并打印每个文件的名称。

到此为止,我们已经学习了如何使用 C++ 代码获取指定目录下所有子文件夹的文件名。我们希望这篇文章能够真正帮助到你,如果你还有任何关于C++编程的问题,欢迎联系我们。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复