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

时间:2013-07-25 15:29:55

标签: c++ c html-parsing tar

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

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

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

实际上我只需要在tar文件中存储我的缓冲区中的Html文件内容(其中包含不同类型的文件数)

1 个答案:

答案 0 :(得分:2)

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

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

或更高效地

 size_t skip = filesize + 511 & ~512;

并向前搜索skip个字节。

例如,如果您的tar文件包含两个大小为12345的文件 a.bin (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. 从Pos开始的 b.txt 的数据。 13312 + 512 = 13824
  5. tar文件的文件大小至少为13824 + 512 = 14324.实际上,您通常会发现tar文件较大,而Pos的下一个512字节。 14324将是\0