- 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.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors8
Uh oh!
There was an error while loading.Please reload this page.