You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Erlang内存中创建tar文件?erl_tar.open调用异常求助

在Erlang内存中打包二进制文件到Tar包

问题原因分析

你遇到的函数 clause 不匹配错误,是因为erl_tar:open/2在写入模式下,并不支持{binary, <<>>}这种参数形式。{binary, Binary}是读取模式下用来加载已有二进制Tar包的参数,而写入内存Tar包时,正确的参数是{binary}。

可行解决方案

以下是完整的内存中打包二进制列表的实现方案,使用erl_tar的open、add和close函数完成:

pack_binaries(Files) when is_list(Files) ->
    % 打开内存Tar包句柄,启用压缩
    {ok, TarHandle} = erl_tar:open({binary}, [write, compressed]),
    % 遍历添加每个文件(格式为 {文件名, 二进制内容})
    lists:foreach(fun({Filename, Bin}) ->
        ok = erl_tar:add(TarHandle, Filename, Bin, [])
    end, Files),
    % 关闭句柄并获取最终的Tar二进制
    {ok, TarBinary} = erl_tar:close(TarHandle),
    TarBinary.

使用示例

% 打包两个二进制文件
TarBin = pack_binaries([
    {"file1.txt", <<"Hello World">>},
    {"data.bin", <<1,2,3,4,5>>}
]),
% TarBin就是打包后的二进制Tar数据

验证说明

  • 调用erl_tar:open({binary}, [write, compressed])会初始化一个空的内存Tar包句柄
  • erl_tar:add/4支持直接传入二进制内容作为文件数据,无需写入磁盘
  • 关闭句柄时返回的TarBinary就是完整的压缩Tar包二进制数据

内容的提问来源于stack exchange,提问作者Benjamin Peinhardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:43:15