我在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'
不会划分行, ' '
可能会出现在里面),所以你需要打开它
iFile = fopen("my.tar.gz", "rb"); if (!iFile) { perror("my.tar.gz"); exit(EXIT_FAILURE); }
另外, feof(iFile)
仅在一些
输入操作之后才有效,所以while(!feof(iFile))
在fopen
之后是错误的…
但这不会帮助您从存档中提取任何文件。
因此,您需要首先解压缩该文件,然后提取或列出其中的相关归档文件。
您可以为解压缩( zlib
库 , gunzip
或zcat
命令)和归档提取( libarchive
库,或libtar
或tar
命令)步骤找到库(和命令可执行文件)。
如果您的操作系统提供它,您可以考虑适当使用popen
function 。
使用putchar(oneChar)
BTW比printf("%c", oneChar)
更短,更简单,更快……
通常,结尾tar.gz
的文件是压缩tar文件)二进制文件)。 因此我建议您使用popen
( )而不是fopen
来使用命令打开文件。
即
iFile = popen("zcat my.tar.gz | tar xf -", "r");
以上就是c/c++开发分享阅读.tar.gz文件相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522102.html