使用 camlzip 创建包含多个文件的 ZIP 存档

任务

压缩 / 创建包含多个文件的 ZIP 存档

使用的 Opam 包

  • camlzip 测试版本:1.11 — 使用的库:camlzip

代码

Zip 模块没有提供可对目录进行操作的函数。

因此,我们编写了一个辅助函数来遍历文件系统。 这里,给定函数 f 将为每个正则文件及其名称作为参数调用。

let rec traverse_fs f directory =
  if Sys.is_directory directory then
    Sys.readdir directory
    |> Array.iter
         (fun entry ->
            traverse_fs
              f (directory ^ "/" ^ entry))
  else
    f directory


首先,我们打开 ZIP 文件以进行写入。

let zip zip_filename directory_name =
  let zip_file = Zip.open_out zip_filename in

然后,我们使用 Zip.copy_file_to_entry 将目录中的每个文件添加到 ZIP 文件中。

  traverse_fs
    (fun name ->
      Zip.copy_file_to_entry name zip_file name)
    directory_name;

为了完成归档,我们关闭了 ZIP 文件。

  Zip.close_out zip_file

食谱不起作用? 注释不清楚或过时?

打开一个问题 或者 为这个食谱做出贡献!