我需要创建一个应用程序来从 zip 存档中提取一个文件,之后我想为 Android 编译它。
我使用的是 Ubuntu,预装了 libzip-0.10.1。我在 Eclipse 中创建了 C 项目,添加了包含路径并找到了用于提取文件的简单脚本。不幸的是,我无法构建以下内容,我可以使用一些建议。
// zip.c file
#include <stdio.h>
#include <stdlib.h>
#include <zip.h>
int main(int argc, char **argv) {
struct zip *zip_file;
struct zip_file *file_in_zip;
int err;
int files_total;
int file_number;
int r;
char buffer[10000];
if (argc < 3) {
fprintf(stderr,"usage: %s <zipfile> <fileindex>\n",argv[0]);
return -1;
};
zip_file = zip_open(argv[1], 0, &err);
if (!zip_file) {
fprintf(stderr,"Error: can't open file %s\n",argv[1]);
return -1;
};
file_number = atoi(argv[2]);
files_total = zip_get_num_files(zip_file);
if (file_number > files_total) {
printf("Error: we have only %d files in ZIP\n",files_total);
return -1;
};
file_in_zip = zip_fopen_index(zip_file, file_number, 0);
if (file_in_zip) {
while ( (r = zip_fread(file_in_zip, buffer, sizeof(buffer))) > 0) {
printf("%s",buffer);
};
zip_fclose(file_in_zip);
} else {
fprintf(stderr,"Error: can't open file %d in zip\n",file_number);
};
zip_close(zip_file);
return 0;
};
我还添加了一些 .h 文件以在我的项目中包含目录,并将一些 .c 文件添加到带有 zip.c 文件的目录中。之后所有的依赖都很好,但我有一个错误:
‘struct zip’ has no member named ‘default_password’ in file zip_fopen_index.c
该文件zip_fopen_index.c
是:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include "zipint.h"
ZIP_EXTERN struct zip_file *
zip_fopen_index(struct zip *za, zip_uint64_t fileno, int flags)
{
return zip_fopen_index_encrypted(za, fileno, flags, za->default_password); // error here
}