使用 camlzip 解压缩包含多个文件的 ZIP 压缩文件
任务
压缩 / 解压缩包含多个文件的 ZIP 压缩文件
使用的 Opam 包
- camlzip 测试版本:1.11 — 使用的库:camlzip
代码
从 ZIP 压缩文件中解压缩文件时,如果目录不存在,我们需要创建它。
let create_dir_if_not_exists filename =
let rec aux_ensure base l =
if not (Sys.file_exists base) then
Sys.mkdir base 0o755
else
if not (Sys.is_directory base) then
failwith "Error, file exists instead of a directory";
match l with
| [] -> failwith "Should not happen"
| [ _filename ] -> ()
| directory :: l' -> aux_ensure (base ^ "/" ^ directory) l'
in
match String.split_on_char '/' filename with
| [ ] -> failwith "Should not happen (null filename)"
| [ _filename ] -> ()
| directory :: l -> aux_ensure directory l
打开 ZIP 文件以供读取。
let unzip zip_filename =
let zip = Zip.open_in zip_filename in
迭代 ZIP 文件中的所有条目。
let entries = Zip.entries zip in
entries
|> List.iter (fun entry ->
Printf.printf "%s\n" entry.Zip.filename;
create_dir_if_not_exists entry.Zip.filename;
如果条目是目录,则只需创建目录。
if entry.Zip.is_directory then
Sys.mkdir entry.Zip.filename 0o755
如果条目是普通文件,则解压缩它。
else
Zip.copy_entry_to_file
zip
entry
entry.Zip.filename);
最后,关闭 ZIP 文件。
Zip.close_in zip