用libarchive读取目录

时间:2014-08-15 22:09:10

标签: c++ libarchive

我有一个C ++程序,我希望从磁盘中读取一些描述的存档。我想以大致树状的形式重建它以镜像磁盘上的结构(不支持符号链接/硬链接等时髦的东西)。

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

1 个答案:

答案 0 :(得分:0)

一般而言,存档文件是文件和目录条目的平面序列。存档格式通常不指定所需的顺序。某些归档格式隐式要求存在目录条目,但有些归档条目根本不需要它们。在前一种情况下,隐式要求来自归档实用程序,如果文件应该在的目录不存在,则在提取文件时会抱怨。这意味着在存档中的任何地方都需要存在该目录的条目才能创建它,或者它必须在运行实用程序之前存在。其他归档实用程序(如tarzip)只会创建缺少的目录。

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