如何使用Glib(或任何其他库)列出目录中的所有文件?

时间:2011-10-09 14:18:58

标签: c++ c filesystems glib

我无法弄清楚如何使用GLib(GIO?)列出给定目录中的所有文件(文件名?)。没有好的文档或教程。任何代码片段都是受欢迎的。如果使用GLib执行此操作是不可能的(或太麻烦),是否有任何好的C或C ++第三方库来执行此操作。除了Boost.FileSystem,因为我在minGw上编译boost.filesystem时遇到了很多麻烦。当然“dirent.h”作为最后的手段,但它不是标准的,虽然它在gnu gcc(mingw)上受支持,但它不包含在MSVC工具链中。那么建议使用dirent.h吗?欢迎任何好的解决方案。

注意:我不知道这是否应标记为c或c ++。我使用的是c ++,但glib是一个c库。

3 个答案:

答案 0 :(得分:6)

如果您正在寻找glib示例,请转到此处。

GDir *dir;
GError *error;
const gchar *filename;

dir = g_dir_open(".", 0, &error);
while ((filename = g_dir_read_name(dir)))
    printf("%s\n", filename);

答案 1 :(得分:0)

在POSIX系统上,是的,我相信opendir / readdir / closedir以及相关的dirent结构是您所需要的。在Win32上,不太确定,但也许this helps

答案 2 :(得分:0)

如今,您为此使用了Gio。 Here is an example来自GNOME Shell,使用Javascript绑定gjs。像这样:

    const directory = GLib.build_filenamev([ 'some', 'path']);

    try {
        fileEnum = directory.enumerate_children('standard::name,standard::type',
                                                Gio.FileQueryInfoFlags.NONE, null);
    } catch (e) {
        fileEnum = null;
    }
    if (fileEnum != null) {
        let info;
        while ((info = fileEnum.next_file(null))) {
            // Do something with info
            // or with fileEnum.get_child(info)
        }
    }