21xrx.com
2025-03-21 12:26:36 Friday
文章检索 我的文章 写文章
C++实现获取文件夹内的所有文件
2023-06-22 04:32:04 深夜i     --     --
C++ 文件夹 获取 所有文件 实现

在编程中,经常需要批量处理多个文件。此时,获取文件夹内所有文件及其文件路径就显得尤为重要。在C++中,通过使用Windows API的FindFirstFile和FindNextFile函数,可以实现获取一个文件夹内的所有文件。

首先,需要包含Windows API头文件和iostream头文件:

#include <windows.h>
#include <iostream>

然后,定义一个函数getFiles,该函数的作用是获取指定路径下所有文件的文件名和文件路径。

void getFiles(const std::string& path, std::vector<std::string>& files)
{
  HANDLE hFind;
  WIN32_FIND_DATAA data;
  std::string filename;
  hFind = FindFirstFileA((path + "/*").c_str(), &data);
  if (hFind != INVALID_HANDLE_VALUE)
  {
    do
    {
      filename = data.cFileName;
      if (filename != "." && filename != "..")
      {
        if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //判断是否是文件夹
        {
          getFiles(path + "/" + filename, files); //递归遍历子文件夹
        }
        else
        {
          files.push_back(path + "/" + filename); //添加文件名和文件路径
        }
      }
    } while (FindNextFileA(hFind, &data));
    FindClose(hFind);
  }
}

在该函数中,首先使用FindFirstFileA函数获取文件夹内的第一个文件的信息,然后使用do-while循环遍历文件夹并获取每个文件的文件名和文件路径。如果遇到文件夹,则使用递归的方式遍历该文件夹下所有文件。

函数的参数path是文件夹的路径,files是一个字符串向量,用于存储文件名和文件路径。

最后,调用getFiles函数即可获取文件夹内所有文件的文件名和文件路径:

int main()
{
  std::vector<std::string> files;
  std::string path = "C:/Users/User/Desktop/folder";
  getFiles(path, files);
  for (auto file : files)
  
    std::cout << file << std::endl;
  
  return 0;
}

在该示例程序中,指定的文件夹路径为C:/Users/User/Desktop/folder,getFiles函数会返回该文件夹内所有文件的文件名和文件路径,并在控制台输出。如果文件夹内有多层子文件夹,则getFiles函数会递归遍历每个子文件夹,并获取所有文件的文件名和文件路径。

总的来说,使用C++实现获取文件夹内的所有文件,可以方便地获取指定路径下所有文件的文件名和文件路径,为后续批量处理文件或读取文件提供了便利。

  
  

评论区