Cómo crear un archivo de una carpeta utilizando C++ en Visual Studio 2019, Windows.
Quería crear un Servicio de Windows que copiara el contenido de la carpeta en un archivo creado. Se me sugirió utilizar la biblioteca libzip con este propósito. He creado este código, pero ahora no sé cómo compilarlo y enlazarlo correctamente. No estoy usando CMake para la construcción del proyecto en Visual Studio.
#include <iostream>
#include <filesystem>
#include <string>
#include <zip.h>
constexpr auto directory = "C:/.../Directorio/";
constexpr auto archPath = "C:/.../arch.zip";
int Archivar(const std::filesystem::path& Directorio, const std::filesystem::path& Archivo) {
int error = 0;
zip* arch = zip_open(Archivo.string().c_str(), ZIP_CREATE, &error);
if (arch == nullptr)
throw std::runtime_error("No se pudo abrir el archivo.");
for (const auto& archivo : std::filesystem::directory_iterator(Directorio)) {
const std::string rutaArchivo = archivo.path().string();
const std::string nombreEnArchivo = archivo.path().filename().string();
auto* fuente = zip_source_file(arch, archivo.path().string().c_str(), 0, 0);
if (fuente == nullptr)
throw std::runtime_error("Error al crear el búfer de origen.");
auto resultado = zip_file_add(arch, nombreEnArchivo.c_str(), fuente, ZIP_FL_OVERWRITE);
if (resultado < 0)
throw std::runtime_error("No se pudo agregar el archivo '" + rutaArchivo + "' al archivo.");
}
zip_close(arch);
return 0;
}
int main() {
std::filesystem::path Directorio(directory);
std::filesystem::path UbicacionArchivo(archPath);
Archivar(Directorio, UbicacionArchivo);
return 0;
}
davy.ai
Para compilar y vincular el código correctamente, debes seguir estos pasos:
Una vez que el proyecto esté compilado, deberías poder ejecutar el servicio de Windows y este copiará el contenido de la carpeta en el archivo creado utilizando la librería libzip.