c++ - 使用 libarchive 读取目录

标签 c++ libarchive

我有一个 C++ 程序,我想从磁盘中读取一些描述的存档。我想以大致类似树的形式重建它以反射(reflect)磁盘上的结构(不支持符号链接(symbolic link)/硬链接(hard link)等时髦的东西)。

读取下一个表头时,很明显可以检查条目类型,看它是目录还是文件。不清楚的是如果它是一个目录接下来会发生什么。 archive_read_next_header 是否自动以 BFS/DFS 方式执行完整的树遍历?或者我应该递归地创建新的 archive_entry 结构并调用一些我还没有找到的函数来遍历目录条目?

最佳答案

一般来说,存档文件是文件和目录条目的平面序列。存档格式通常不指定必需的顺序。一些存档格式隐含地要求存在目录条目,但有些根本不需要它们。在前一种情况下,隐含的要求来自归档实用程序,如果文件应该位于的目录不存在,它们会在提取文件时提示。这意味着要么需要在存档中较早的任何位置为该目录创建一个条目,要么它需要在实用程序运行之前就存在。其他归档实用程序,如 tarzip,将简单地创建丢失的目录。

换句话说,目录条目只代表目录本身,而不代表它们的内容。在一般情况下,当您在文件和目录条目的名称中发现目录节点时,您应该准备好在树中创建目录节点。您需要遍历树以找到每个文件应附加到的节点。

关于c++ - 使用 libarchive 读取目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25334905/

相关文章:

c++ - 为什么更改 visual studio 版本后我的函数会崩溃?

c++ - 将字符串中的某个字母设置为 int + ","

c++ - 在不知道初始文件大小的情况下在 C++ 中创建压缩文件

C++ 在表达式中组合运算符重载

c++ - 对于使用 Clang 构建的目标文件,我需要与 MinGW 链接哪些库?

c++ - 运行昂贵初始化的最佳方法是什么?

python - 使用Python读取内存中的.7z文件,并将每一行作为流处理

c++ - 使用 libarchive 重命名存档中的非空目录

python - 在 Windows 上的 python 中使用 libarchive