如何在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
相关产品推荐
相关产品推荐

