我正在阅读档案文件。在unix中使用ar
命令创建的存档文件。当我把文件说出来时
!<arch>
correct.c/ 1319871022 1000 1000 100664 0 `
hello.c/ 1319871007 1000 1000 100664 0 `
hi.c/ 1319870999 1000 1000 100664 0 `
make.c/ 1319871028 1000 1000 100664 0 `
pie.c/ 1319871015 1000 1000 100664 0 `
three.c/ 1319871035 1000 1000 100664 0 `
我想要展示的只是
correct.c
hello.c
hi.c
make.c
pie.c
three.c
以下是有关此部分的代码。 archive_name
是文件名。 filestr
是一个字符串,它可以容纳30 chars
而文件是FILE *file
,但它在上面声明。
file = fopen(archive_name, "r");
if(file == NULL) perror("\nError opening file\n");
else {
while( fgets(filestr, 10, file) != NULL )
printf("%s", filestr);
fclose(file);
任何帮助将不胜感激。
答案 0 :(得分:0)
正如您所见,存档以“!”开头(接着是新线)。
之后,你有一个大致相同的结构:
#pragma pack(1) // use whatever your compiler wants to ensure against padding.
struct file_header {
char filename[16];
char timestamp[11];
char ownerID[5];
char groupID[5];
char filemode[8];
char filesize[9];
char magic[2];
};
存档中的每个文件都有一个,所以如果你想只转储文件名,你可以(至少在理论上 - 继续阅读)跳过标题,然后读取这些并显示文件名。 / p>
但确实存在一个问题:正如您所看到的,每个文件名只允许16个字节,这通常是不够的。有各种各样的处理方式,并且(不幸的是)它们从ar
的一个实现变化到下一个,所以几乎不可能告诉你如何获得真实的文件名。
最明显的解决方案可能是使用popen
来运行ar
(并希望它与您需要查看的存档文件的格式相匹配)。