我正在尝试使用 libzip 和 C 创建用于构建档案的程序。下面的函数必须从文件创建档案。带有文件的目录名称和作为命令行参数传递的输出文件的名称。代码工作没有任何错误。程序不创建.zip文件的主要问题,我不明白为什么。
#include <zip.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <stdbool.h>
#include <string.h>
static bool is_modified (char *filename);
static void create_zip (char *source_name, char *output_filename, char *dir_name)
{
int err = 0;
DIR *dir = opendir(dir_name);//open directory
struct dirent *entry;
if(!dir){
fprintf(stderr, "Cannot read directory\n");
exit(1);
}
fprintf(stdout, "DIR - [%s]\n", dir_name);
zip_t *archive_zip = zip_open(output_filename, ZIP_CREATE, &err);//create zip
if(archive_zip == NULL)
{
zip_error_t ziperr;
zip_error_init_with_code(&ziperr, err);
fprintf(stderr, "Failed to create archive, error -[%i]\n", err);
zip_close(archive_zip);
exit(1);
}else
printf("Archive [%s] created\n", output_filename);
while((entry = readdir(dir)) != NULL)// walking through directory
{
if(strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0 && strcmp(entry->d_name, source_name) !=0)
{
zip_source_t *source = zip_source_file(archive_zip, entry->d_name, 0, 0);//creating source for every file in dir
if(source == NULL)
{
fprintf(stderr, "Cant create source file [%s]\n", entry->d_name);
}
if(zip_file_add(archive_zip, entry->d_name, source, ZIP_FL_OVERWRITE) < 0)// adding it to archive with overwrite flag
{
zip_source_free(source);
fprintf(stderr, "Cant add file [%s]\n", entry->d_name);
}else
fprintf(stderr, "File [%s] added\n", entry->d_name);
}
}
zip_close(archive_zip);
closedir(dir);
}
int main(int argc, char **argv)
{
if (argc != 3) {
fprintf(stderr, "Usage: %s <output_file> <input_dir_name>\n", argv[0]);
return 1;
}
create_zip(argv[0],argv[1], argv[2]);
return 0;
}
输出看起来像
DIR - [test_dir]
Archive [test] created
File [f1.txt] added
File [f2.txt] added
谢谢你的帮助)。