0
erlangのようなvalaの関数はzip:list_dir
のようにありますか? libgsfが見つかりましたが、zipファイルを解凍したくありません。Vala:Zipアーカイブ内のすべてのファイルの名前を解凍せずに取得するにはどうすればいいですか?
erlangのようなvalaの関数はzip:list_dir
のようにありますか? libgsfが見つかりましたが、zipファイルを解凍したくありません。Vala: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 ("%s\n", 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
でコンパイルします。
IOError
errordomainにのみGIOが必要です。実際には、操作が失敗したより説明的なメッセージでcheck_ok
メソッドを拡張したいと考えています。
また、zipファイルのみを許可するようにlibarchiveを制限することもできます。私はexample from the upstream wikiを翻訳しました。
GCCは 'archive_read_finish'は廃止予定であると警告しました。警告を消すために私ができることはありますか? – huron
libarchive.vapiファイルを更新する必要があり、archive_read_finish関数の名前がlibarchive 3.0.2のarchive_freeに変更されました。これをhttps://bugzilla.gnome.org/(product Vala)に報告すると、Vala開発者はそれを修正できます。 –
libarchiveの開発者はarchive_read_finishを削除しない限り、そのままvapiを使用することができます。 –