如何了解Tar解析器中的文件

How to know the files inside the Tar parser

本文关键字:文件 Tar 何了解 了解      更新时间:2023-10-16

我正在开发一个可视化的c++应用程序。我需要知道tar文件中的文件类型(我的意思是它是否包含.png文件、.html文件或.txt文件)(仅通过c++编程)-没有什么可以处理命令。我在下面的链接上得到了一些知识-如何解析tar文件这里我得到的信息是,在缓冲区[512],我们有一个文件的内容存在于thge-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;

并向前查找CCD_ 1字节。

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

  1. 包含a.bin信息的标头从位置0开始
  2. a.bin的数据,从512位置开始
  3. 包含关于b.txt的信息的标头,起始于位置512+12800=13312
  4. b.txt的数据,起始于位置13312+512=13824
  5. tar文件的文件大小将至少为13824+512=14324。在实践中,您通常会发现tar文件更大,位置14324处的下一个512字节将是