Vala:如何在不解压缩的情况下检索zip存档中所有文件的名称



vala中是否有类似erlang中zip:list_dir的函数?我找到了libgsf,但是我不想解压缩zip文件。

您可以使用libarchive

void check_ok (Archive.Result r) throws IOError {
    if (r == Archive.Result.OK)
        return;
    if (r == Archive.Result.WARN)
        return;
    throw new IOError.FAILED ("libarchive returned an error");
}
int main () {
    try {
        var a = new Archive.Read ();
        check_ok (a.support_filter_all ());
        check_ok (a.support_format_all ());
        check_ok (a.open_filename ("archive.zip", 10240));
        unowned Archive.Entry entry;
        while (a.next_header (out entry) == Archive.Result.OK) {
            stdout.printf ("%sn", entry.pathname ());
            a.read_data_skip ();
        }
    }
    catch (IOError e) {
        stderr.printf (e.message + "n");
        return 1;
    }
    return 0;
}

valac ListZip.vala --pkg libarchive --pkg gio-2.0编译

GIO仅用于IOError错误域。实际上,您可能希望用一些更具描述性的消息来扩展check_ok方法,说明操作失败了。

你也可以限制libchive只允许zip文件。我从上游wiki翻译了这个例子。

最新更新