GTK Gossip: 目錄資訊

本文介绍如何使用GDir遍历目录结构并展示目录内容。通过示例代码演示了如何读取目录下的文件和子目录,并递归地列出所有层级的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果您要取得目錄的資訊,可以使用GDir及其相關的函式,您可以使用g_dir_open()函式指定一個目錄路徑,這會傳回GDir物件,接著您可以使用g_dir_read_name()讀取目錄下的檔案名稱。

直接來看個範例,下面這個程式示範如何從命令列引數輸入要查詢的目錄,並顯示該目錄下的內容:

  • dir_demo.c
#include <glib.h>

void listDir(const gchar *parent, int hier) {
const gchar *file, *fullPath;
GDir *dir;
int i;

dir = g_dir_open(parent, 0, NULL);

while((file = g_dir_read_name(dir))) {
for(i = 0; i < hier; i++) {
g_print(" ");
}

fullPath = g_build_filename(parent, file, NULL);
if(g_file_test(fullPath, G_FILE_TEST_IS_DIR)) {
g_print("[%s]/n", file);
listDir(fullPath, hier + 1);
}
else {
g_print("%s/n", file);
}
}

g_dir_close(dir);
}

int main(int argc, char *argv[]) {
listDir(argv[1], 0);
return 0;
}


在程式中,g_build_filename()可以協助建立檔案路徑名稱,您可以指定目錄或檔案名稱,最後以一個NULL作 為結尾,g_build_filename()會自行依作業系統,使用適當的目錄分隔符號(Linux下的/或Windows下的/),建立完整的檔案或 目錄路徑。

一個執行的範例如下所示:

$ dir_demo ~/library
[hibernate-3.2]
    build.bat
    build.sh
    build.xml
    changelog.txt
    [doc]
        [api]
            allclasses-frame.html
            allclasses-noframe.html
            constant-values.html
            deprecated-list.html
            help-doc.html
            index-all.html
            index.html
            jdstyle.css
            [org]
                [hibernate]
                    [action]
            ..略


另外還有幾個簡便的檔案操作函式,像是g_rename()可更改檔案名稱,g_remove()可移除檔案,g_rmdir()可刪除目錄,g_mkdir()可建立目錄等,這些都可以在 File Utilities 中查詢到使用方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值