阅读.tar.gz文件

时间:2016-01-08 05:53:13

标签: c file

我在Windows上编程C。 我在尝试阅读.tar.gz文件时遇到了这个问题。

文件看起来像(用notepad ++打开): enter image description here

我以前读过的代码如下:

iFile = fopen("my.tar.gz", "r");
while ((oneChar = fgetc(iFile)) != EOF) {
        printf("%c", oneChar);
}

下图显示了我的程序的结果: enter image description here

我遇到的问题是,结果只有几行而原始文件有几千行(6310行,如你所见)。我的猜测是.tar.gz文件包含一些奇怪的字符(比如文件中间的EOF?)。

我的问题是为什么notepad ++可以显示整个文件,而我的程序却不能。这个问题有解决方案吗?

2 个答案:

答案 0 :(得分:3)

function generate1() { var table = document.getElementById('my_table'); var rowCount = table.rows.length; var f = document.form; f.method = "post"; f.target = ""; f.action = 'purchaseAction.jsp?rowCount=' + rowCount; // f.submit(); } 文件通常对某些gnu-zipped进行tar archive压缩。它当然是二进制文件(其中的任何.tar.gz'\n'都不会划分行,而'\r'可能会出现在里面),所以你需要打开它与

'\0'

此外, iFile = fopen("my.tar.gz", "rb"); if (!iFile) { perror("my.tar.gz"); exit(EXIT_FAILURE); } 仅在某些feof(iFile)输入操作后有效,因此<stdio.h>之后while(!feof(iFile))错误...

但这无法帮助您从档案中提取任何文件。

因此,您需要首先解压缩该文件,然后提取或列出其中的相关存档文件。

您可以找到解压缩(zlib libraryfopengunzip命令)和归档提取(libarchive库或{的库(和命令可执行文件) {1}}或zcat命令)步骤。

如果您的操作系统提供了它,您可以考虑正确使用popen function

使用libtar的BTW比tar ....

更短,更简单,更快

答案 1 :(得分:3)

通常文件结尾std::is_base_of< Transition< typename TransitionCl::Cost_Type >, TransitionCl >::value, 是压缩tar文件)二进制文件)。因此,我建议您使用tar.gzhttp://linux.die.net/man/3/popen)而不是popen来使用命令打开文件。

fopen