如何知道Tar解析器中的文件

我正在开发一个visual c ++应用程序。 我需要知道tar文件中存在的文件类型(我的意思是它是否包含.png文件or.html文件或.txt文件)(仅通过c ++ prgramming) – 无需处理命令。 我已经对下面的链接有了一些了解 – 如何在这里解析tar文件我有信息在缓冲区[512]我们有一些文件存在于tar文件中。我的第一个问题是

(1.)假设我在tar中有超过1个文件,我从该位置获得了大小(&buffer [124],11); 从512到文件的大小,我有该文件的内容,我把它存储在一个缓冲区供我个人使用。但据我所知,这个规则(内容从512位置开始)对第一个位置的文件有效在tar文件中。 如果我必须获得3/4位置的文件的位置,内容和大小(如果不确定tar文件中存在的文件的位置怎么办)该怎么办?

(2.)我在想什么? 如果我必须转到下一个文件内容我必须做512 * 2(因为第一个文件内容从512位置开始,所以下一个文件将在1024 – 我相信它是一个错误的方法,但可以任何一个请更正吗? ?)。

实际上我必须从tar文件(其中包含不同类型的文件数)中仅存储我的缓冲区中的Html文件内容

tar文件的内容始终是标题块数据块标题块数据块 …其中每个标题块包含一个文件的所有信息(文件名,大小,权限,…),以下数据块包含文件的内容。 每个数据块的大小是文件大小的512的下一个倍数,因为它在标题块中(该句子对我来说看起来很糟糕。可以请任何母语人士正确)。 因此,如果您已经读取了一个标题块并想跳到下一个计算

size_t skip = filesize % 512 ? filesize + 512 - (filesize % 512) : filesize 

或者,更有效率

  size_t skip = filesize + 511 & ~512; 

并向前搜索skip字节。

例如,如果您的tar文件包含两个大小为12345的文件(512的下一个倍数为12800)和大小为123的b.txt (512的下一个倍数 – 显然是512)那么您将拥有:

  1. 包含从Pos开始的a.bin信息的标题。 0
  2. 从Pos开始的a.bin的数据。 512
  3. 包含从Pos开始的b.txt信息的标题。 512 + 12800 = 13312
  4. b.txt的数据从Pos开始。 13312 + 512 = 13824
  5. tar文件的文件大小至少为13824 + 512 = 14324.实际上,您通常会发现tar文件较大,而Pos的下一个512字节。 14324将是\0