我正在开发一个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文件内容(其中包含不同类型的文件数)
答案 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)然后你会:
\0