按特定顺序读取 .tar 个条目(C#、SharpLibZip)

Read .tar entries in a specific order (C#, SharpLibZip)

背景

this website 中,我找到了几个使用 SharpLibZip 阅读 .tar 实现的示例。

问题

但在我的例子中,我想确保根据条目的名称以特定顺序读取条目。有简单的方法吗?

更多详情

我的 .tar 存档包含每月数据和每日文件(file-01file-02、...、file-31)。但是,数据提供者在创建 .tar 文件时似乎没有注意,条目似乎以随机顺序到达。

您需要编写自己的 tar 解码器。由您决定是否认为这“容易”。 tar 格式非常简单。

您需要先扫描 tar 文件以找到所有 headers,保存文件名以及每个文件数据的偏移量和长度。然后你可以来回搜索任何文件的偏移量来读取它的内容。

如果 tar 文件被压缩,这将变得更加困难,例如如果它是 .tar.gz 文件,而不是 .tar 文件。

tar 格式已记录 here

更新:

在评论中,OP 透露它实际上是一个 .tar.bz2 文件。如前所述,这需要额外的工作才能随机访问条目。除了为 tar 内容建立索引外,还需要读取整个 .bz2 文件来为压缩入口点建立索引,这些入口点不对应于文件 star 的位置t 在 tar 存档中。然后要访问一个文件,您首先会转到该文件数据的 start 之前最近的 bzip2 入口点,并从那里解压缩直到您到达然后读出该数据。

将文件重新归档并重新压缩为 zip 格式会更容易,zip 格式旨在随机访问和提取单个条目。