Создать архив в памяти C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Создать архив в памяти C++

Сообщение Anonymous »


Я создаю архив в памяти и для теста записываю его на диск, чтобы проверить, не поврежден ли он, открывается без ошибок, и видно, что размер файла.txt соответствует реальному, но когда я ошибка открытия файла.txt, что архив поврежден, хотя данные записаны, можете мне помочь?

#include #include // Обратные вызовы для minizip для работы с памятью voidpf open_memory(voidpf opaque, const char* имя файла, режим int) { возврат непрозрачный; } uLong write_memory(voidpf opaque, поток voidpf, const void* buf, размер uLong) { автоматическая память = static_cast(непрозрачный); const char* start = reinterpret_cast(buf); память->вставка(память->конец(), начало, начало + размер); размер возврата; } long Tell_memory (voidpf непрозрачный, поток voidpf) { автоматическая память = static_cast(непрозрачный); вернуть память->размер(); } long seek_memory (voidpf opaque, поток voidpf, смещение uLong, начало int) { вернуть 0; // Нам это действительно не нужно для нашего примера } int close_memory (voidpf непрозрачный, поток voidpf) { вернуть 0; } int testerror_memory (voidpf непрозрачный, поток voidpf) { вернуть 0; } интервал основной() { const char* myData = "Это данные для моего пользовательского файла."; uLong myDataLength = strlen(myData); std::vector MemoryBuffer; // Настраиваем функции minizip для записи в наш буфер памяти функции zlib_filefunc_def; funcs.zopen_file = open_memory; funcs.zwrite_file = write_memory; funcs.ztell_file = Tell_memory; funcs.zseek_file = search_memory; funcs.zclose_file = close_memory; funcs.zerror_file = testerror_memory; funcs.opaque = &memoryBuffer; zipFile zip = zipOpen2(nullptr, APPEND_STATUS_CREATE, nullptr, &funcs); если (zip) { zip_fileinfo zipfi = {0}; zipOpenNewFileInZip(zip, "file.txt", &zipfi, nullptr, 0, nullptr, 0, nullptr, Z_DEFLATED, Z_DEFAULT_COMPRESSION); zipWriteInFileInZip(zip, myData, myDataLength); zipCloseFileInZip(zip); zipClose(zip, nullptr); std::cout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»