21xrx.com
2024-12-22 20:58:31 Sunday
登录
文章检索 我的文章 写文章
C++ 如何遍历文件夹?
2023-06-29 05:06:44 深夜i     --     --
C++ 文件夹 遍历

在编程语言中,遍历文件夹是一个常见的操作。C++也提供了一些方便的API来遍历文件夹。

下面就介绍两种C++遍历文件夹的方法:

方法一:使用Windows API

使用Windows API,我们可以通过FindFirstFile和FindNextFile函数递归遍历文件夹中的所有文件和子目录。这两个函数的参数为要遍历的文件夹路径和一个WIN32_FIND_DATA类型的结构体变量。

示例代码:


#include <windows.h>

#include <iostream>

#include <string>

using namespace std;

void traverseFolder(string path)

{

  string pattern = path + "/*";

  WIN32_FIND_DATA data;

  HANDLE hFind;

  if ((hFind = FindFirstFile(pattern.c_str(), &data)) != INVALID_HANDLE_VALUE)

  {

    do

    {

      if (strcmp(data.cFileName, ".") != 0 && strcmp(data.cFileName, "..") != 0)

      {

        cout << data.cFileName << endl;

        if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //判断是否为文件夹

        {

          string subpath = path + "/" + data.cFileName;

          traverseFolder(subpath); //递归进入子目录

        }

      }

    } while (FindNextFile(hFind, &data) != 0);

    FindClose(hFind);

  }

}

int main()

{

  string path = "D:/TestFolder";

  traverseFolder(path);

  return 0;

}

方法二:使用boost库

使用boost库中的filesystem,我们可以很方便的遍历文件夹,该库提供了一个directory_iterator迭代器,可以迭代文件夹中的所有文件和子目录。

例子代码:


#include <iostream>

#include <boost/filesystem.hpp>

using namespace std;

using namespace boost::filesystem;

void traverseFolder(string path)

{

  path p(path);

  directory_iterator it(p);

  while (it != directory_iterator())

  {

    if (is_directory(it->status()))

    {

      cout << it->path().string() << endl;

      traverseFolder(it->path().string()); //递归进入子目录

    }

    else

    {

      cout << it->path().string() << endl;

    }

    ++it;

  }

}

int main()

{

  string path = "D:/TestFolder";

  traverseFolder(path);

  return 0;

}

总结:

以上就是C++遍历文件夹的两种方法,使用Windows API需要注意区分文件和文件夹,使用boost库则方便快捷。读者可以根据具体场景,选择适合自己的方法。

  
  

评论区

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