我有一个 C++ 程序,我希望从磁盘中读取一些描述的存档。我想以大致树状的形式重建它以镜像磁盘上的结构(不支持符号链接/硬链接等时髦的东西)。
读下一个header的时候,很明显可以查看entry type,看是目录还是文件。不清楚的是如果它是一个目录接下来会发生什么。是否archive_read_next_header
以 BFS/DFS 方式自动执行完整的树遍历?还是我应该递归地创建新archive_entry
结构并调用一些我还没有找到的函数来遍历目录条目?
我有一个 C++ 程序,我希望从磁盘中读取一些描述的存档。我想以大致树状的形式重建它以镜像磁盘上的结构(不支持符号链接/硬链接等时髦的东西)。
读下一个header的时候,很明显可以查看entry type,看是目录还是文件。不清楚的是如果它是一个目录接下来会发生什么。是否archive_read_next_header
以 BFS/DFS 方式自动执行完整的树遍历?还是我应该递归地创建新archive_entry
结构并调用一些我还没有找到的函数来遍历目录条目?
一般来说,存档文件是文件和目录条目的平面序列。存档格式通常不指定所需的顺序。一些存档格式隐含地要求存在目录条目,但有些根本不需要它们。在前一种情况下,隐含的要求来自存档实用程序,如果文件应该位于的目录不存在,则在提取文件时会抱怨。这意味着要么需要在归档文件中的任何位置有该目录的条目才能创建它,要么它需要在实用程序运行之前存在。其他存档实用程序,如tar
or zip
,将简单地创建缺少的目录。
换句话说,目录条目只代表目录本身,而不是它们的内容。在一般情况下,当您在文件和目录条目的名称中发现目录节点时,您应该准备好在树中创建目录节点。您需要遍历树以找到每个文件应附加到的节点。