0

我正在尝试使用 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

谢谢你的帮助)。

4

0 回答 0