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

发布于 2024-12-09 01:54:13 字数 336 浏览 0 评论 0原文

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

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

I cannot figure out how to use GLib (GIO?) to list all the files (file-names?) in a given directory. There is no good doc or tutorial. Any code snippets are welcome. If it is not possible (or too troublesome) to do this using GLib, Is there any good C or C++ third party library to do this. EXCEPT Boost.FileSystem as I have a lot of trouble compiling boost.filesystem on minGw. There is of course "dirent.h" as a last resort , but it isn't standard and although it is supported on gnu gcc (mingw) , it is not included in the MSVC toolchain. So is it recommended to use dirent.h? Any good solution welcome.

Note: I don't know whether this should be tagged as c or c++. I am using c++ but glib is a c library.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

很快妥协 2024-12-16 01:54:13

这是一个 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);

Here is a GLib example, using g_dir_open and g_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);
苯莒 2024-12-16 01:54:13

现在你用 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)
        }
    }

Nowadays you use Gio for this. Here is an example from GNOME Shell, using the Javascript binding, gjs. Something like:

    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)
        }
    }
噩梦成真你也成魔 2024-12-16 01:54:13

在 POSIX 系统上,是的,我相信 opendir/readdir/linedir 和关联的 dirent 结构正是您所需要的。在 Win32 上,不太确定,但也许这有帮助

On POSIX systems, yes, I believe opendir/readdir/closedir and the associated dirent structure are what you need. On Win32, not so sure, but maybe this helps?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文