问题标签 [libarchive]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
784 浏览

c - mingw+libarchive:交叉编译链接器错误

我正在尝试在 Linux 下为 win32 交叉编译一个小程序。它使用 libarchive,在我的 fedora 23 安装(全部通过 dnf 安装)中可用于 mingw,但我得到很多链接器错误。

来源:https ://github.com/panzi/save_the_zazus

编译器/链接器输出:

对于这个单一源文件程序,我只写了一个简单的 Makefile。png 文件不在 repo 中(还),因此如果您尝试编译,只需为它们创建空文件。我尝试了动态和静态链接(更喜欢静态,所以我需要做的就是传递一个 .exe 文件)。对于我使用的这个输出-static -larchive,它没有抱怨任何丢失的库,但我得到了所有那些未定义的引用。

0 投票
1 回答
1560 浏览

c++ - Creating compressed file in C++ without knowing the initial file size

I've been using Java's standard library for writing Zip Archive files and, in that case, I do not have to know the files that are going to be stored into a zip file beforehand: I would simply create a new ZipEntry and then write into the ZipFile stream.

On the other hand, LibArchive and ZLib for C++ have to set the to-be-archived file information beforehand: in my case the data that I want to compress comes from an extern stream, and hence I cannot query the size of the stream itself. Is there a library/way to use those libraries such that the initial file information is not required?

EDIT Moreover, the following C++ code with LibArchive produces a valid ZIP file containing a file with no data.

0 投票
0 回答
676 浏览

c++ - Libarchive:如何在 Windows 上压缩档案?

我正在尝试使用 libarchive 在 Windows 上创建压缩存档,但目前它无法正常工作。我可以在不压缩的情况下创建 zip 或 pax_restricted(tar) 档案,没有任何问题。

为了添加压缩,我尝试了以下一些组合:

我主要尝试使用 zip 格式的 lzip 压缩和 pax_restricted 格式的 gzip 压缩。

首先,我不确定我应该使用archive_write_set_compression_* 还是archive_write_add_filter_*。

当我尝试添加 lzip 压缩并进入该函数时,我看到它返回 ARCHIVE_FATAL 并显示错误消息“此平台不支持 lzma 压缩”。

当我尝试添加 gzip 压缩并进入该函数时,我看到它返回 ARCHIVE_WARN 并显示错误消息“使用外部 gzip 程序”。如果我让该过程继续进行,则生成的存档的大小为零。

我觉得在 unix 系统上有 libarchive 用于压缩的 lzma 和 gzip 系统库,而这些在 Windows 上不可用。

我按照使用 CMake 等的说明使用最新的稳定版本构建了 libarchive。我没有注意到 CMake 配置中有任何错误,比如我缺少 lzma 或 gzip。

谢谢你的帮助。

0 投票
0 回答
163 浏览

python - python libarchive 获取存档的 mtime

我安装了 Python libarchive 0.4.3。我想获取存储在 7z 文件中的 7z 文件的 mtime。这与本地存储在磁盘上的文件的 mtime 不同。假设它是底层源 C tarball lzma1604.7z。

以下程序将列出所有文件及其 mtime。但是我看不到 7z 文件中给出的整个 7z“tarball”的时间。

上面的程序打印:

但是,如果我运行7z l lzma1604.7z最后给出的结果:

那么如何通过 libarchive 在 Python 中获取信息,特别是整个存档的 mtime?

0 投票
1 回答
875 浏览

c++ - 在 UNC 路径上使用 libarchive 提取 .tar.gz?

我正在尝试使用libarchive将文件提取.tar.gz到当前文件夹。测试机器是否在虚拟框下运行win7 64bit。如果我在C:\.vdi磁盘)中执行此操作,它可以正常工作,但是它在E:\(来自主机的共享文件夹)上失败。基于此

错误消息我认为问题是 UNC 路径。是否可以处理它libarchive

这是我的代码:

我想我可以先使用https://stackoverflow.com/a/2324777/781743和 chdir 到非 unc 路径(如果存在),应该可以吗?但是有没有办法直接制作libarchive支持UNC路径?

0 投票
0 回答
534 浏览

c++ - 无法使用 libarchive 从 Tar 存档中提取二进制文件

更新

下面的例子确实有效。我误读了标志 ARCHIVE_EXTRACT_TIME 的意图,并希望看到新创建的文件。相反,该文件被正确提取,但具有其原始创建日期。这是一个漫长的一周!:-)


我在 Tar 存档中存储了以下数据:

  • 选择/
  • fw.bin
  • 广告/
    • 垃圾桶/
      • 安装程序.sh

我有以下代码,在 Ubuntu(g++ 版本 5.2.1)上运行,使用 libarchive 提取内存中存档的内容,主要取自示例:

它如上正确解压目录并写入installer.sh 文件。但是,缺少二进制文件 (fw.bin)。为了将二进制文件写入磁盘,我是否缺少特定设置?我是否使用了错误的 API 调用?

0 投票
0 回答
69 浏览

libarchive - 带有 Xar 的 libarchive - 无法读取存档中第 2 项及以上的内容

以下代码适用于 TAR 等格式,但是当我将它用于 XAR 时,它会成功读取第一项,但从第二项及以后,会检索文件名和大小,但archive_read_data失败(使用错误代码 25 - ENOTTY)。

0 投票
1 回答
862 浏览

python - 如何正确导入最新的 libarchive 以在 Mac OS 上使用

libarchive的发行说明指出,由于旧版本的 libarchive 包含在 MacOS 中,他们建议更改 LD_LIBRARY_PATH 以指向最近的 libarchive 副本的位置。

我已使用此代码尝试实现这一目标,但在运行脚本时收到错误消息。

错误:

我在外面的任何地方都找不到很好的答案。

0 投票
1 回答
918 浏览

c++ - 在 libarchive 中寻找,如何重置标头?

是否可以再次读取解压文件?

假设我使用archive_read_next_header(a, &entry)了 ,并且我使用 读取了未知数量的字节archive_read_data(a, ptr_to_buffer, buffer_size)。现在我想重置它并从头开始重新阅读。我试图覆盖seekoff(std::streamoff off, std::ios_base::seekdir way, std::ios_base::openmode which). 我知道,由于压缩算法的内部工作,可能无法仅在解压缩后的数据中寻找,并且数据不会存储在 libarchive 内部缓冲区中的有限字节数之外的任何地方。

这个想法是把它全部重置,然后读取std::streamoff off字节,这样我就可以创建反向搜索。前向搜索很容易,只需读取std::streamoff off字节。它确实效率低下,但让我们希望, seek 不会被太多使用。

整个结构archive是这样初始化的:

其中 container 包含大部分std::istream,而回调是操作该流的函数。

我想要实现的模板`

`

我的 underflow() 方法也是这样实现的:`

`

0 投票
1 回答
117 浏览

c++ - Steam 协议 C++ 解压多条消息

我正在用 C++ 为 Steam 协议编写一个插件。我正在使用https://github.com/seishun/SteamPP ,它使用来自https://github.com/SteamRE/SteamKit的 protobufs ,通常它可以工作。我可以与 Steam 通信,我可以毫无问题地发送和接收单条消息(包括登录),但 Steam 经常发送几条压缩在一条消息中的消息(来自 protobuf 的 EMsg::Multi),这就是我的问题。我无法正确解压缩它们。我不明白我做错了什么。

在此函数(libarchive)中,archive_read_data 返回 -25,这是一个错误代码,下一个断言会引发错误。怎么了?它在 C# SteamKit 版本和 node.js 版本中运行良好。我也尝试过 Crypto++ Gunzip,但它会引发 CryptoPP::Gunzip::HeaderErr 异常。 检查调试 GIF