Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道Tar解析器中的文件 我正在开发一个Visual C++应用程序。我需要知道文件类型(我是指它是否包含.pNG文件或.HTML文件或.txt文件)存在于TAR文件(仅通过C++编程)-没有处理这些命令。 我对下面的链接有一些了解- 这里我得到的信息是,在缓冲区[512]中,我们有一个文件的内容存在于tar文件中_C++_C_Html Parsing_Tar - Fatal编程技术网

如何知道Tar解析器中的文件 我正在开发一个Visual C++应用程序。我需要知道文件类型(我是指它是否包含.pNG文件或.HTML文件或.txt文件)存在于TAR文件(仅通过C++编程)-没有处理这些命令。 我对下面的链接有一些了解- 这里我得到的信息是,在缓冲区[512]中,我们有一个文件的内容存在于tar文件中

如何知道Tar解析器中的文件 我正在开发一个Visual C++应用程序。我需要知道文件类型(我是指它是否包含.pNG文件或.HTML文件或.txt文件)存在于TAR文件(仅通过C++编程)-没有处理这些命令。 我对下面的链接有一些了解- 这里我得到的信息是,在缓冲区[512]中,我们有一个文件的内容存在于tar文件中,c++,c,html-parsing,tar,C++,C,Html Parsing,Tar,(1.)假设tar中存在超过1个文件,并且我从该位置获得了大小(&buffer[124],11);从512到文件大小,我拥有该文件的内容,并将其存储在一个缓冲区中供我个人使用。但据我所知,(内容从512位置开始)规则适用于tar文件中第一个位置的文件。如果我必须获得位于3/4位置的文件的位置、内容和大小(如果我不确定tar文件中存在的文件的位置),该怎么办 (2)我的想法对吗???如果我必须转到下一个文件内容,我必须执行512*2(因为第一个文件内容从512位置开始,所以下一个文件将在1024位

(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;
并向前搜索
跳过
字节

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

  • 包含从位置0开始的垃圾箱信息的标题
  • 从位置512开始的垃圾箱数据
  • 包含从位置512+12800=13312开始的b.txt信息的标题
  • 从位置13312+512=13824开始的b.txt数据
  • tar文件的文件大小至少为13824+512=14324。实际上,您通常会发现tar文件更大,位置14324处的下一个512字节将是
    \0

  • 据我所知,标题块是指我们可以获取文件和数据块格式详细信息的地方,是指我们拥有与标题块对应的实际内容的地方。但我不明白的是,如果我得到的文件内容是512个位置到文件大小,并且该文件的大小是(12346622-我的意思是很长),那么我可以得到位置512*2=1024处的其他文件内容,因为仍然在这个地址,我有第一个文件的文件内容。你明白我的意思了吗?我已经编辑了答案并附上了一个例子。希望现在一切都清楚了。您还可以将
    skip
    计算为:
    size\u t skip=filesize+511&~512-节省了一点操作数量。@mats:当然,我在这里故意这样做,因为在我看来,“向上取整”的效果有点明显。但是我将添加您的作为备选解析tar文件,如下所述(例如,使用
    fread(…,512,…)
    fseek(…,skip,SEEK)
    ),直到找到您感兴趣的文件头。下一个数据块是您的(这就是“向前搜索跳过字节”的意思)