如何使用C或C ++获取目录中的文件列表?

  • 回答 (2)
  • 关注 (0)
  • 查看 (77)

如何从C或C ++代码中确定目录中的文件列表?

我不能执行'ls'命令并从我的程序中解析结果。

暴躁的蛆宝宝暴躁的蛆宝宝提问于
御姐万岁回答于

C ++ 17现在有一个std::filesystem::directory_iterator,可以用作

#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
    std::string path = "path_to_directory";
    for (auto & p : fs::directory_iterator(path))
        std::cout << p << std::endl;
}

此外,std::filesystem::recursive_directory_iterator也可以迭代子目录。

akjok54stay hungry stay foolish回答于

在小而简单的任务中,我不使用boost,我使用dirent.h,它也可用于Windows:

DIR *dir;
struct dirent *ent;
if ((dir = opendir ("c:\\src\\")) != NULL) {
  /* print all the files and directories within directory */
  while ((ent = readdir (dir)) != NULL) {
    printf ("%s\n", ent->d_name);
  }
  closedir (dir);
} else {
  /* could not open directory */
  perror ("");
  return EXIT_FAILURE;
}

它只是一个小的头文件,并且不需要使用像boost这样的基于模板的大方法就可以完成大多数简单的工作(无需冒犯,我喜欢提升!)。

Windows兼容层的作者是Toni Ronkko。在Unix中,它是一个标准的头文件。

2017年更新:

在C ++ 17中,现在有一种正式的方式来列出文件系统的文件:std::filesystem。下面是源代码Shreevardhan的一个很好的答案:

#include <string>

#include <iostream>

#include <filesystem>

namespace fs = std::filesystem;

int main()

{

std::string path = "path_to_directory";

for (auto & p : fs::directory_iterator(path))

std::cout << p << std::endl;

}

如果你正在使用C ++ 17方法,请考虑加强他的答案。

扫码关注云+社区

领取腾讯云代金券