- Notifications
You must be signed in to change notification settings - Fork95
Fork of SevenZip++ for modern builds.
License
getnamo/7zip-cpp
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A fork ofSevenZip++ for modern builds. Uses cmake to generate build files for desired Visual Studio version, seesetup section for instructions.
Uses latest lzma1801 SDK
Originally from:http://bitbucket.org/cmcnab/sevenzip/wiki/Home
This is a C++ wrapper for accessing the 7-zip COM-like API in 7z.dll and 7za.dll. This code is heavily based off of the Client7z sample found in theLZMA SDK.
The project itself is a static library.
To use, first load the 7z DLL into memory:
#include<7zpp/7zpp.h>SevenZip::SevenZipLibrary lib;lib.Load();
If the appropriate 7z DLL is not in your path you may wish to specify it explicitly in the call to load. Note you may have the 64-bit version installed but are trying to load it from a 32-bit executable; keep that in mind if you encounter errors.
lib.Load(_T("path\\to\\7za.dll"));
Then create and use a compressor:
SevenZip::SevenZipCompressorcompressor(lib, archiveName);compressor.SetCompressionFormat(SevenZip::CompressionFormat::Zip);compressor.UseAbsolutePaths(false);compressor.AddFile(targetFile);compressor.AddDirectory(targetDir);compressor.DoCompress(callbackfunc);
Or an extractor:
SevenZip::SevenZipExtractorextractor(lib, archiveName);// Try to detect compression typeif (!extractor.DetectCompressionFormat()){extractor.SetCompressionFormat(SevenZip::CompressionFormat::Zip);}...// Change this function to suitSevenZip::ProgressCallBack *extractcallbackfunc =nullptr;...extractor.ExtractArchive(destination, extractcallbackfunc);
Or a lister:
classListCallBackOutput : SevenZip::ListCallback{virtualvoidOnFileFound(WCHAR* path, ULONGLONG size){std::wcout<< path<<L""<< size<< std::endl;}};...SevenZip::SevenZipListerlister(lib, archiveName);// Try to detect compression typeif (!lister.DetectCompressionFormat()){lister.SetCompressionFormat(SevenZip::CompressionFormat::Zip);}ListCallBackOutput myListCallBack;lister.ListArchive((SevenZip::ListCallback *)&myListCallBack);
Note: Most of the functions now return a boolean to indicate if it workedinstead of throwing an exception.
Otherwise, don't forget to wrap the operations in a try/catch block to handle errors:
...catch (SevenZip::SevenZipException& ex){ std::cerr << ex.GetMessage() << std::endl;}...
- Ensure you havecmake andgit installed. Navigate to folder of choice.
- Open a powershell window and type
git clone https://github.com/getnamo/7zip-cpp.git --recursive
- Navigate into the newly cloned project
cd 7zip-cpp
- (Optional for Test app only) Download and buildBoost
- Example build with cmake using powershell
cd buildcmake -G "Visual Studio 15 2017 Win64" ../cmake --build ../build --config Release
- Commands from 5 will build win64 Release target and output will be found in
build/Release/7zpp.lib
Add project into your cmakelists
add_subdirectory(${pathto7zip-cpp} ${PROJECT_SOURCE_DIR}/build/build7zpp)target_include_directories(${my_project} INTERFACE ${pathto7zip-cpp}/Include)target_link_libraries(${my_project} 7zpp)add_dependencies(${my_project} 7zpp) #might not be necessary
In order to compile the tests,you must have boost libraries in your path or specify the location where cmake can find them
- Assuming you're in the project directory
- Download and buildBoost
cd buildcmake ../ -DBOOST_ROOT="My boost location"
- Then finally
cmake --build ../build
to build
Only 1 test unit is failing.
Read Contributing.md
- Devel branch is the bleeding edge, but it should still work.
- Devel-XXX branches are current topics.
- Master branch is the latest stable version.
- More branch information is in Contributing.md.
About
Fork of SevenZip++ for modern builds.