C++复制、压缩文件夹
本文将介绍如何使用C++编写程序来复制和压缩文件夹。这是一个非常实用的功能,特别是在需要备份和存档文件的情况下。本文中我们将学习如何使用C++中的标准库和第三方库来实现这一功能。
复制文件夹
下面是复制文件夹的基本过程:
- 打开原文件夹并获取其内容列表。
- 创建新文件夹并在其中复制所有内容。
- 如果原文件夹中包含子文件夹,则重复以上步骤,直到所有子文件夹都被复制。
以下是使用C++实现这些步骤的示例代码:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
void copyFolder(fs::path src, fs::path dest)
{
if (!fs::exists(dest))
{
fs::create_directory(dest);
}
for (auto& file : fs::directory_iterator(src))
{
auto current = file.path();
auto target = dest / current.filename();
if (fs::is_directory(current))
{
copyFolder(current, target);
}
else
{
fs::copy_file(current, target, fs::copy_options::overwrite_existing);
}
}
}
int main()
{
fs::path srcFolder = "path/to/source/folder";
fs::path destFolder = "path/to/destination/folder";
copyFolder(srcFolder, destFolder);
return 0;
}
压缩文件夹
我们可以使用第三方库来压缩文件夹,其中最常用的是libzip库,它是一个用于处理zip文件的C库。下面是使用libzip库来压缩文件夹的示例代码:
#include <iostream>
#include <zip.h>
#include <filesystem>
namespace fs = std::filesystem;
void compressFolder(fs::path src, fs::path dest)
{
auto zip = zip_open(dest.string().c_str(), ZIP_CREATE | ZIP_EXCL, nullptr);
if (zip == nullptr) {
throw std::runtime_error("failed to open zip archive");
}
for (auto& file : fs::recursive_directory_iterator(src, fs::directory_options::skip_permission_denied))
{
auto current = file.path();
auto target = current.string().substr(src.string().length() + 1); // remove prefix
if (fs::is_directory(current))
{
// create directory in zip
zip_add_dir(zip, target.c_str());
}
else
{
// add file to zip
zip_source_add(zip, current.string().c_str(), target.c_str(), ZIP_FL_OVERWRITE | ZIP_FL_ENC_UTF_8);
}
}
zip_close(zip);
}
int main()
{
fs::path srcFolder = "path/to/source/folder";
fs::path zipFile = "path/to/destination/archive.zip";
compressFolder(srcFolder, zipFile);
return 0;
}
以上就是使用C++复制和压缩文件夹的示例代码,这些代码可以快速实现备份和存档文件夹的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++复制、压缩文件夹 - Python技术站