PowerToys/tools/BugReportTool/BugReportTool/ZipTools/zipfolder.cpp
2021-05-20 18:41:12 +03:00

28 lines
899 B
C++

#include "ZipFolder.h"
#include "..\..\..\..\deps\cziplib\src\zip.h"
void ZipFolder(std::filesystem::path zipPath, std::filesystem::path folderPath)
{
struct zip_t* zip = zip_open(zipPath.string().c_str(), ZIP_DEFAULT_COMPRESSION_LEVEL, 'w');
if (!zip)
{
printf("Can not open zip.");
throw -1;
}
using recursive_directory_iterator = std::filesystem::recursive_directory_iterator;
const size_t rootSize = folderPath.wstring().size();
for (const auto& dirEntry : recursive_directory_iterator(folderPath))
{
if (dirEntry.is_regular_file())
{
auto path = dirEntry.path().string();
auto relativePath = path.substr(rootSize, path.size());
zip_entry_open(zip, relativePath.c_str());
zip_entry_fwrite(zip, path.c_str());
zip_entry_close(zip);
}
}
zip_close(zip);
}