Создать архив в памяти C++ ⇐ C++
-
Anonymous
Создать архив в памяти C++
Я создаю архив в памяти и для теста записываю его на диск, чтобы проверить, не поврежден ли он, открывается без ошибок, и видно, что размер файла.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
Я создаю архив в памяти и для теста записываю его на диск, чтобы проверить, не поврежден ли он, открывается без ошибок, и видно, что размер файла.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
Мобильная версия