LINUX.ORG.RU

[C][libzip] Проблема с chdir

 


0

0

Есть такой код (строки с проверками на ошибки опущены):

        const char *old_cwd = getcwd(NULL, 0);
        zip = zip_open(zb->result_path, ZIP_CREATE, &err);
        chdir(zb->source_dir_path);
        for (i = 0; i < fdlist.count; ++i) {
                zip_src = zip_source_file(zip, fdlist.list[i]->old_name, 0, -1);
                zip_add(zip, fdlist.list[i]->new_name, zip_src);
        }
        chdir(old_cwd);
        zip_close(zip);

        

Я делаю chdir, так как мне нужно добавить файлы в массив из директории zb->source_dir_path, а в fdlist.list[] хранятся относительные пути для этой директории.

Но этот код не работает. Зип файл нигде не создается. Перемена мест двух последних строк

        zip_close(zip);
        chdir(old_cwd);
дает мне архив, но в директории zb->source_dir_path (это неверный путь, правильный - old_cwd).

Я сделал такой хак:

        const char *old_cwd = getcwd(NULL, 0);
        zip = zip_open(zb->result_path, ZIP_CREATE, &err);
        chdir(zb->source_dir_path);
        for (i = 0; i < fdlist.count; ++i) {
                zip_src = zip_source_file(zip, fdlist.list[i]->old_name, 0, -1);
                zip_add(zip, fdlist.list[i]->new_name, zip_src);
        }
        zip_close(zip);
        /* If zippath is not absolutely then move it to old cwd. */
        if (zb->result_path[0] != '/') {
                char cmdbuf[128] = {0};
                strcpy(cmdbuf, "mv ");
                strcat(cmdbuf, zb->result_path);
                strcat(cmdbuf, " ");
                strcat(cmdbuf, old_cwd);
                system(cmdbuf);
        }
        chdir(old_cwd);
Я просто перемещаю архив из папки в папку. Это работает.

Но что не так с первым кодом?

★★

Последнее исправление: bk_ (всего исправлений: 1)

очевидно, zip-файл создается и записывается на этапе zip_close

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.