Bonjour,

je suis à la recherche d'un code / librairie qui me permettrais de compresser un dossier en format tar.gz sous linux en C++.
J'ai essayer déjà Boost mais je me suis confronté à un problème que je n'ai pas résolut (voir code ci dessous)
La lib: zlib ne permet pas la compression de dossier mais uniquement de fichier unique.
Et quand a la lib: libtar, je n'ai quasiment trouvé aucun exemple fiable.

Merci à vous si vous avez une idée..


PS: mon code avec la lib: boost


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
#include <cstddef>
#include <string>
#include "Zipclass.h"
#include "zlib.h"
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/device/back_inserter.hpp>
#include <boost/iostreams/filter/test.hpp>
#include <boost/ref.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/test/test_tools.hpp>
#include <boost/test/unit_test.hpp>
 
#define TEMP_DIRECTORIE "/opt/appl/var/"
#define compressionLevel 0
 
 
using namespace std;
using namespace boost;
//using namespace boost::iostreams;
 
 
 
Zipclass::Zipclass(std::string input_directory, std::string output_file)
{
 
	std::vector<char>  temp, dest;
 
	std::string fileName = std::string(TEMP_DIRECTORIE) + std::string("tempfile.gz");
 
	std::ofstream file;
	file.open(fileName.c_str(), std::ios_base::out | std::ios_base::binary);
 
	//filtering_stream<output> out;
	boost::iostreams::gzip_params params;
 
	params.file_name = fileName;
	params.level = boost::iostreams::zlib::best_compression;
 
	boost::iostreams::gzip_compressor out(params);
}
Résultat:
./../src/Zipclass.cpp:52: undefined reference to `boost::iostreams::zlib::default_compression'
./../src/Zipclass.cpp:52: undefined reference to `boost::iostreams::zlib::deflated'
./../src/Zipclass.cpp:52: undefined reference to `boost::iostreams::zlib::default_strategy'
./../src/Zipclass.cpp:52: undefined reference to `boost::iostreams::zlib::best_compression'

ps je travail sous eclipse C++, avec ubuntu

Thx