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

问题描述 投票:0回答:3

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

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

c++ c filesystems glib
3个回答
11
投票

这是一个 GLib 示例,使用 g_dir_openg_dir_read_name:

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
投票

在 POSIX 系统上,是的,我相信

opendir
/
readdir
/
closedir
以及相关的
dirent
结构正是您所需要的。在 Win32 上,不太确定,但也许这有帮助


0
投票

现在您使用 Gio 来实现此目的。 这是一个来自 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)
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.