21xrx.com
2024-12-27 16:20: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++实现获取文件夹内的所有文件,可以方便地获取指定路径下所有文件的文件名和文件路径,为后续批量处理文件或读取文件提供了便利。

  
  

评论区

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