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

我不允许执行ls命令并从程序中解析结果.

推荐答案

UPDATE 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 (const auto & entry : fs::directory_iterator(path))
        std::cout << entry.path() << std::endl;
}

Old Answer:

在小而简单的任务中,我不使用Boost,我使用dirent.h.它在UNIX中作为标准标头可用,也可通过compatibility layer created by Toni Ronkko在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(无意冒犯,我喜欢boost!).

C++相关问答推荐

设计处理各种数据类型的方法和数据 struct

为什么信号量为空= 0,而不是阻塞?

为什么已经设置的值在C中被重置为for循环条件中的新值?

__VA_OPT__(,)是否可以检测后面没有任何内容的尾随逗号?

具有交换链获取和命令缓冲区提交的同步-危险-读后写错误

为什么cudaFree不需要数据 struct 的地址?

如何仅使用软件重新初始化STM32微控制器中的USB枚举?

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

OSDev--双缓冲重启系统

生产者消费者计数器意外输出的C代码

Valgrind用net_pton()抱怨

用于计算位数和的递归C函数

C23标准是否向后兼容?

Makefile无法将代码刷新到ATmega328p

atoi函数最大长-长误差的再创造

将char*铸造为空**

GCC认为这是一个VLA是对的吗?

为什么孤儿进程在 Linux 中没有被 PID 1 采用,就像我读过的一本书中声称的那样?

当 n 是我们从用户那里获得的整数时,创建 n 个 struct 参数

创建 makefile 来编译位于不同目录中的多个源文件