C OS X 将目录内容读入字符串数组

标签 c macos directory osx-mavericks

我正在尝试获取目录的内容。理想情况下,我想将它们存储在一个字符串数组中。除了打开目录、遍历其内容并在其运行时填充数组之外,有没有其他方法可以在 c 语言中执行此操作?

我在运行 OS X 10.9 的系统上工作

最佳答案

您可以使用 POSIX scandir 获取分配的目录列表函数,它采用路径和可选的过滤和排序回调,并返回 dirent 结构的数组。 OS X 还提供了 an equivalent function它采用 block 而不是回调来进行排序和过滤。

int scandir(const char *dirname, struct dirent ***namelist,
            int (*select)(const struct dirent *),
            int (*compar)(const struct dirent **, const struct dirent **));

检索未排序的条目列表非常简单:

int num_entries;
struct dirent **entries = NULL;

num_entries = scandir("/", &entries, NULL, NULL);

for(int i = 0; i < num_entries; i++)
    puts(entries[i]->d_name);

//entries is ours to free
for(int i = 0; i < num_entries; i++)
    free(entries[i]);
free(entries);

POSIX 还提供了一个预制的排序函数,可与 scandir 一起使用以按字母顺序排序。要使用它,只需将 alphasort 作为最后一个参数传递即可。

小心 scandir 返回错误 (-1)。上述代码的结构无需显式检查,但在更精细的用途中可能无法做到这一点。

关于C OS X 将目录内容读入字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21332694/

相关文章:

c++ - 将对象初始化为全零

ruby-on-rails - "gem install therubyracer -v ' 0.10.2 '"在 osx mavericks 上未安装

macos - 如何在 OS X Storyboard开始时隐藏初始窗口

macos - OSX-Terminal.app + vim + 日晒配色方案

android - 如何使用 android 的可扩展 ListView 显示文件夹和文件列表?

c - 栈中auto变量占用的内存空间是多少

c - OpenMP:在 while 循环中并行化 for 循环

c - 在 C 中跨文件共享变量

javascript - Node.js 无法在另一个文件夹中找到文件

python - HttpError 400 错误请求 - Google 管理目录 API (Python)