Я не могу извлечь исполняемый файл правильно с помощью libzip - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь извлечь исполняемый файл из zip-архива, используя приведенный ниже код, но по какой-то причине он неправильно выводит файл на диск. Когда я пытаюсь запустить извлеченный файл, я получаю сообщение об ошибке «Это приложение не может работать на вашем P C». Размер файла при извлечении составляет 309 КБ, поэтому, похоже, все данные есть. Что не так с моим кодом? Он работает очень хорошо, когда я вручную извлекаю его. Кроме того, когда я пытаюсь извлечь файл .txt, он записывает 2 новых строки для каждой новой строки вместо 1.

int error = 0;
zip *z = zip_open("pathtozip.zip", 0, &error);

struct zip_stat st;
zip_stat_init(&st);
zip_stat(z, "file.exe", 0, &st);

char *contents = new char[st.size];

zip_file *f = zip_fopen(z, "file.exe", ZIP_FL_COMPRESSED);
zip_fread(f, contents, st.size);
zip_fclose(f);

if (std::ofstream("C:\\users\\admin\\desktop\\test.exe", std::ofstream::binary).write(contents, st.size))
    std::cout << "File Extracted" << std::endl;

zip_close(z);

1 Ответ

0 голосов
/ 12 марта 2020

ZIP_FL_COMPRESSED - Считать сжатые данные. В противном случае данные распакованы ...

Это означает, что вы читаете данные из архива в сжатом виде.

Просто снимите этот флаг, чтобы получить несжатый контент .

...