【问题标题】:Read directory with libarchive使用 libarchive 读取目录
【发布时间】:2014-10-09 16:33:43
【问题描述】:

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

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

【问题讨论】:

  • 您可以按照此 printf 示例并检查存档的输出来轻松检查:gsp.com/cgi-bin/…
  • 如果我在 Linux 上运行 C 并且只关心在读取一种特定格式和压缩组合时库的一个构建在一个平台上的行为方式,我可以做到。
  • 你不信任界面,我可以理解...

标签: c++ libarchive


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-06-13
    • 2014-11-14
    • 2020-08-09
    • 2018-01-07
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多