阅读.tar.gz文件

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

该文件看起来像(用notepad ++打开): 在此处输入图像描述

我以前读过的代码如下:

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

下图显示了我的程序的结果: 在此处输入图像描述

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

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

.tar.gz文件通常是某些tar存档的gnu-zipped压缩。 它当然是一个二进制文件 (其中的任何'\n''\n' '\r'不会划分行, '\0'可能会出现在里面),所以你需要打开它

  iFile = fopen("my.tar.gz", "rb"); if (!iFile) { perror("my.tar.gz"); exit(EXIT_FAILURE); } 

另外, feof(iFile)一些输入操作之后才有效,所以while(!feof(iFile))fopen之后是错误的…

但这不会帮助您从存档中提取任何文件。

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

您可以为解压缩( zlib库 , gunzipzcat命令)和归档提取( libarchive库,或libtartar命令)步骤找到库(和命令可执行文件)。

如果您的操作系统提供它,您可以考虑适当使用popenfunction 。

使用putchar(oneChar) BTW比printf("%c", oneChar)更短,更简单,更快……

通常,结尾tar.gz的文件是压缩tar文件)二进制文件)。 因此我建议您使用popenhttp://linux.die.net/man/3/popen )而不是fopen来使用命令打开文件。

 iFile = popen("zcat my.tar.gz | tar xf -", "r");