170 похожих чатов

Подскажите, создал я зип архив и пробую с помощью minizip

разархивировать а там проблемы с доступом к файлам или чем-то. А если вручную архивировать winrar то код работает. Из-за каких свойств архива могут такие проблемы возникать? Нужно что где-то разрешить? Или из-за чего может быть такое с архивами?

8 ответов

15 просмотров

Если вы объясните, при чем тут с++, то, возможно, вас помогут

Покажи код

Till Schneider
Покажи код

Код создания архива или разархивирование?

Вот добавление файла в архив. Мне кажется я пропустил какое-то свойство которое не дает нормально разархивировать. void MainWindow::addFileToArchive(zipFile& archive, std::string path, std::string archSubFolder) { QFileInfo fileInfo(QString::fromStdString(path)); std::string str_path = (fileInfo.absolutePath()).toStdString(); std::string search_str = archSubFolder; std::size_t pos = str_path.find(search_str); std::string archPath = ""; if (pos != std::string::npos) { archPath = str_path.substr(pos); } const char* file_path = path.c_str(); const char* file_name = ((fileInfo.fileName()).toStdString()).c_str(); std::ifstream file(file_path, std::ios::binary); if (!file) { std::cerr << "Can't open archive " << file_path << " to read." << std::endl; return; } file.seekg(0, std::ios::end); const std::streampos file_size = file.tellg(); file.seekg(0, std::ios::beg); char* buffer = new char[file_size]; file.read(buffer, file_size); std::string copy_path = path; std::size_t pos2 = copy_path.find_last_of("/\\"); std::string filename = copy_path.substr(pos2 + 1); std::size_t dot_pos = filename.find_last_of("."); std::string name_without_extension = filename.substr(0, dot_pos); string archPathRes = archPath + "/" + transliterate(name_without_extension) + "." + (fileInfo.suffix()).toStdString(); zipOpenNewFileInZip(archive, archPathRes.c_str(), nullptr, nullptr, 0, nullptr, 0, nullptr, Z_DEFLATED, Z_DEFAULT_COMPRESSION); zipWriteInFileInZip(archive, buffer, static_cast<unsigned int>(file_size)); zipCloseFileInZip(archive); delete[] buffer; }

Скорее всего архив создается не в том месте в файловой системе. Что-то с путем, отладчиком или логами глянуть, че за путь получается. Ещё надо понимать, где процесс находится, если путь относительный, потому что если относительный, то архив создается/читается относительно текущего пути процесса

Виталик Шостак Шостак
Вот добавление файла в архив. Мне кажется я пропус...

const char* file_name инициализируется строкой, разрушающейся в той же строке

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта