我正在 Windows 上编写 C 语言。 我在尝试读取 .tar.gz 文件时遇到了这个问题。
我以前阅读的代码如下:
iFile = fopen("my.tar.gz", "r");
while ((oneChar = fgetc(iFile)) != EOF) {
printf("%c", oneChar);
}
我遇到的问题是,结果只有几行,而原始文件有数千行(6310 行,如您所见)。我的猜测是 .tar.gz 文件包含一些奇怪的字符(比如文件中间的 EOF?)。
我的问题是为什么notepad++可以显示整个文件而我的程序不能。这个问题有解决方案吗?
最佳答案
A .tar.gz
文件通常是gnu-zipped压缩一些 tar archive .它当然是一个二进制文件(里面的任何'\n'
或'\r'
都不分行,'\0'
可能出现在里面),所以你需要打开它
iFile = fopen("my.tar.gz", "rb");
if (!iFile) { perror("my.tar.gz"); exit(EXIT_FAILURE); }
此外,feof(iFile)
仅在 一些 <stdio.h>
之后有效输入操作so while(!feof(iFile))
在 fopen
之后是错误的...
但这不会帮助您从存档中提取任何文件。
因此您需要先解压缩该文件,然后提取或列出其中的相关存档文件。
您可以找到用于解压缩( zlib
library、gunzip
或zcat
命令)和存档提取( libarchive
库、libtar
或tar
命令)的库(和命令可执行文件) ) 步骤。
如果您的操作系统提供它,您可以考虑适本地使用 popen
function .
顺便说一句,使用 putchar(oneChar)
比 printf("%c", oneChar)
更短、更简单、更快....
关于c - 读取 .tar.gz 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670373/