I am trying to decompress lz4 archive like this.
#include <iostream>
#include <lz4.h>
#include <gflags/gflags.h>
#include <fstream>
#include "pcapng.hpp"
DEFINE_int32(t, 1, "Number");
int main(int argc, char *argv[]){
gflags::ParseCommandLineFlags(&argc, &argv, true);
std::vector<std::string> files;
for (int i = 1; i < argc; ++i) {
files.emplace_back(argv[i]);
}
int threadsNumber = FLAGS_t;
for (const auto& fileName : files) {
if (fileName.size() > 4 && fileName.substr(fileName.size() - 4) == ".lz4") {
std::ifstream input(fileName, std::ios::binary);
if (!input.is_open()) {
std::cerr << "Error: File not found: " << fileName << std::endl;
return 1;
}
input.seekg(0, std::ios::end);
size_t compressed_size = input.tellg();
input.seekg(0, std::ios::beg);
// Read compressed data into a buffer
std::vector<char> compressed_data(compressed_size);
input.read(compressed_data.data(), compressed_size);
std::vector<char> decompressed_data(compressed_size * 5);
int decompressed_size = LZ4_decompress_safe(compressed_data.data(), decompressed_data.data(), compressed_data.size(), decompressed_data.size());
if (decompressed_size >= 0) {
decompressed_data.resize(decompressed_size);
std::cout << "File decompressed: " << std::endl;
} else {
std::cerr << "Decompression failed for file: " << fileName << std::endl;
}
}
else{
}
}
return 0;
}
And I always go to Decompression failed for file with error code -4. But I can easy decompress using lz4 utility.
lz4 -d temp.lz4
it works without errors, but need the code. Also I read about lz4_frame. Probably I should to use frame decompression.