如何从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++相关问答推荐

为什么listen()(在调用accept()之前)足以让应用程序完成3次握手?

C/SDL程序,渲染不使用我的渲染器

MISRA C:2012 11.3违规强制转换(FLOAT*)到(uint32_t*)

DPDK-DumpCap不捕获端口上的传入数据包

变量>;-1如何在C中准确求值?

如何在下面的C代码中正确管理内存?

在for循环中指向数组开头之前

编译器如何处理具有更复杂值的枚举?

C代码在字符串中删除不区分大小写的子字符串的问题

将字符串数组传递给C中的函数:`str[dim1][str_size]`vs`*str[dim1]`

是否定义了此函数的行为?

C语言中神秘的(我认为)缓冲区溢出

这段代码用于在C中以相反的顺序打印数组,但它不起作用

通过k&;r语法的c声明无效

C标准关于外部常量的说明

为什么二进制文件的大小不会随着静态数据的大小而增加?

'printf("%s", user_input)' 危险吗?

Struct 内的数组赋值

为什么写入关闭管道会返回成功

C11 嵌套泛型