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

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

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

8 ответов

19 просмотров

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

Покажи код

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 инициализируется строкой, разрушающейся в той же строке

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта