es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para compilar y vincular el código correctamente, debes seguir estos pasos:

    1. Descarga e instala la librería libzip desde el sitio web oficial (https://libzip.org/).
    2. Agrega los archivos de encabezado de libzip a tu proyecto yendo a Proyecto -> Propiedades -> C/C++ -> General -> Directorios de inclusión adicionales y agregando la ruta a los archivos de encabezado de libzip.
    3. Agrega los archivos de la librería libzip a tu proyecto yendo a Proyecto -> Propiedades -> Vinculador -> General -> Directorios de librerías adicionales y agregando la ruta a los archivos de la librería libzip.
    4. Agrega los archivos de la librería libzip a tu proyecto yendo a Proyecto -> Propiedades -> Vinculador -> Entrada -> Dependencias adicionales y agregando el nombre del archivo de la librería libzip (por ejemplo, libzip.lib).
    5. Compila el proyecto yendo a Compilar -> Generar solución o presionando F7.

    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.

Comments are closed.