Desarrollo con C++ para Azure Files

Sugerencia

Probar el Explorador de Microsoft Azure Storage

El Explorador de Microsoft Azure Storage es una aplicación independiente y gratuita de Microsoft que permite trabajar visualmente con los datos de Azure Storage en Windows, macOS y Linux.

Se aplica a

Tipo de recurso compartido de archivos SMB NFS
Recursos compartidos de archivos Estándar (GPv2), LRS/ZRS Sí No
Recursos compartidos de archivos Estándar (GPv2), GRS/GZRS Sí No
Recursos compartidos de archivos Premium (FileStorage), LRS/ZRS Sí No

Acerca de este tutorial

En este tutorial aprenderá a realizar operaciones básicas en Azure Files con C++. Si es la primera vez que usa Azure Files, le resultará útil repasar los conceptos de las secciones siguientes para comprender los ejemplos. Algunos de los ejemplos tratados son:

  • Crear y eliminar recursos compartidos de archivos de Azure
  • Crear y eliminar directorios
  • Cargar, descargar y eliminar un archivo
  • Establecer y enumerar los metadatos de un archivo

Nota:

Dado que se puede acceder a Azure Files a través de SMB, es posible escribir aplicaciones sencillas que accedan al recurso compartido de archivos de Azure mediante las clases y funciones estándar de E/S de C++. En este artículo se describe cómo escribir aplicaciones que utilizan el SDK de C++ de Azure Storage, que usa la API de REST de archivos para comunicarse con Azure Files.

Requisitos previos

Instalación

En esta sección se explica cómo preparar un proyecto para que funcione con la versión 12 de la biblioteca cliente de Azure Blob Storage para C++.

Instalación de los paquetes

El comando vcpkg install instalará el SDK de Azure Storage Blobs para C++ y las dependencias necesarias:

vcpkg.exe install azure-storage-files-shares-cpp:x64-windows

Para más información, visite GitHub para adquirir y crear el SDK de Azure para C++.

Crear el proyecto

En Visual Studio, cree una aplicación de consola de C++ para Windows llamada FilesShareQuickstartV12.

Cuadro de diálogo de Visual Studio para configurar una nueva aplicación de consola de Windows en C++

Copia de las credenciales desde Azure Portal

Cuando la aplicación de ejemplo realiza una solicitud a Azure Storage, debe estar autorizada. Para autorizar una solicitud, agregue a la aplicación las credenciales de la cuenta de almacenamiento en forma de cadena de conexión. Para ver las credenciales de la cuenta de almacenamiento, siga estos pasos:

  1. Inicie sesión en Azure Portal.

  2. Busque su cuenta de almacenamiento.

  3. En el panel del menú de la cuenta de almacenamiento, en Seguridad y redes, seleccione Claves de acceso. Aquí puede ver las claves de acceso de la cuenta, así como la cadena de conexión completa de cada clave.

    Captura de pantalla que muestra dónde se encuentra la configuración de las claves de acceso en Azure Portal

  4. En el panel Claves acceso, seleccione Mostrar claves.

  5. En la sección key1, busque el valor de Cadena de conexión. Seleccione el icono Copiar al portapapeles para copiar la cadena de conexión. En la siguiente sección, agregará el valor de la cadena de conexión a una variable de entorno.

    Captura de pantalla que muestra cómo copiar una cadena de conexión desde Azure Portal

Configuración de la cadena de conexión de almacenamiento.

Una vez que haya copiado la cadena de conexión, escríbala en una variable de entorno nueva en la máquina local que ejecuta la aplicación. Para establecer la variable de entorno, abra una ventana de consola y siga las instrucciones de su sistema operativo. Reemplace <yourconnectionstring> por la cadena de conexión real.

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Después de agregar la variable de entorno en Windows, debe iniciar una nueva instancia de la ventana de comandos.

Reiniciar programas

Después de agregar la variable de entorno, reinicie todos los programas en ejecución que necesiten leer esta variable. Por ejemplo, reinicie el entorno de desarrollo o el editor antes de continuar.

Ejemplos de código

Estos fragmentos de código de ejemplo muestran cómo realizar las siguientes tareas con la biblioteca cliente de recursos compartidos de archivos de Azure para C++:

Adición de archivos de inclusión

Desde el directorio del proyecto:

  1. Abra el archivo de soluciones FilesShareQuickstartV12.sln en Visual Studio.
  2. En Visual Studio, abra el archivo de origen FilesShareQuickstartV12.cpp.
  3. Quite todo el código incluido en main que se haya generado automáticamente.
  4. Agregue las instrucciones #include.
#include <iostream>
#include <stdlib.h>
#include <vector>

#include <azure/storage/files/shares.hpp>

Obtención de la cadena de conexión

El código siguiente recupera la cadena de conexión de la cuenta de almacenamiento de la variable de entorno creada en Configuración de la cadena de conexión de almacenamiento.

Agregue este código a main():

        // Retrieve the connection string for use with the application. The storage
        // connection string is stored in an environment variable on the machine
        // running the application called AZURE_STORAGE_CONNECTION_STRING.
        // Note that _MSC_VER is set when using MSVC compiler.
        static const char* AZURE_STORAGE_CONNECTION_STRING = "AZURE_STORAGE_CONNECTION_STRING";
#if !defined(_MSC_VER)
        const char* connectionString = std::getenv(AZURE_STORAGE_CONNECTION_STRING);
#else
        // Use getenv_s for MSVC
        size_t requiredSize;
        getenv_s(&requiredSize, NULL, NULL, AZURE_STORAGE_CONNECTION_STRING);
        if (requiredSize == 0) {
            throw std::runtime_error("missing connection string from env.");
        }
        std::vector<char> value(requiredSize);
        getenv_s(&requiredSize, value.data(), value.size(), AZURE_STORAGE_CONNECTION_STRING);
        std::string connectionStringStr = std::string(value.begin(), value.end());
        const char* connectionString = connectionStringStr.c_str();
#endif

Creación de un recurso compartido de archivos

Cree una instancia de la clase ShareClient; para ello, llame a la función CreateFromConnectionString. Luego, llame a createIfNotExists para crear el recurso compartido de archivos real en la cuenta de almacenamiento.

Agregue este código al final de main():

using namespace Azure::Storage::Files::Shares;

std::string shareName = "sample-share";

// Initialize a new instance of ShareClient
auto shareClient = ShareClient::CreateFromConnectionString(connectionString, shareName);

// Create the files share. This will do nothing if the files share already exists.
std::cout << "Creating files share: " << shareName << std::endl;
shareClient.CreateIfNotExists();

Carga de archivos en un recurso compartido de archivos

El siguiente fragmento de código:

  1. Declara una cadena que contiene "Hello Azure!".
  2. Obtiene una referencia a un objeto ShareFileClient al obtener el ShareDirectoryClient raíz y llamar a GetFileClient en el recurso compartido de archivos de la sección Creación de un recurso compartido de archivos.
  3. Carga la cadena en el archivo mediante la llamada a la función UploadFrom. Esta función crea el archivo, en caso de que no exista, o lo actualiza si existe.

Agregue este código al final de main():

std::string fileName = "sample-file";
uint8_t fileContent[] = "Hello Azure!";

// Create the ShareFileClient
ShareFileClient fileClient = shareClient.GetRootDirectoryClient().GetFileClient(fileName);

// Upload the file
std::cout << "Uploading file: " << fileName << std::endl;
fileClient.UploadFrom(fileContent, sizeof(fileContent));

Establecimiento de los metadatos de un archivo

Establezca las propiedades de los metadatos de un archivo mediante una llamada a la función ShareFileClient.SetMetadata.

Agregue este código al final de main():

Azure::Storage::Metadata fileMetadata = { {"key1", "value1"}, {"key2", "value2"} };
fileClient.SetMetadata(fileMetadata);

Enumeración de los metadatos de un archivo

Establezca las propiedades de los metadatos de un archivo mediante una llamada a la función ShareFileClient.GetProperties. Los metadatos están en el campo Metadata del Value devuelto. Los metadatos serán un par clave-valor, similar al ejemplo de Establecimiento de los metadatos de un archivo.

// Retrieve the file properties
auto properties = fileClient.GetProperties().Value;
std::cout << "Listing blob metadata..." << std::endl;
for (auto metadata : properties.Metadata)
{
    std::cout << metadata.first << ":" << metadata.second << std::endl;
}

Descarga de archivos

Una vez recuperadas las propiedades del archivo en Enumeración de los metadatos de un archivo, se crea un nuevo objeto std::vector<uint8_t> con las propiedades del archivo cargado. Descargue el archivo que ha creado anteriormente en el nuevo objeto std::vector<uint8_t>, para llo, llame a la función DownloadTo en la clase base ShareFileClient. Por último, muestre los datos del archivo descargado.

Agregue este código al final de main():

std::vector<uint8_t> fileDownloaded(properties.FileSize);
fileClient.DownloadTo(fileDownloaded.data(), fileDownloaded.size());

std::cout << "Downloaded file contents: " << std::string(fileDownloaded.begin(), fileDownloaded.end()) << std::endl;

Eliminación de un archivo

El código siguiente elimina el archivo del recurso compartido de archivos de Azure Storage, para lo que llama a la función ShareFileClient.Delete.

std::cout << "Deleting file: " << fileName << std::endl;
fileClient.DeleteIfExists();

Eliminación de un recurso compartido de archivos

El código siguiente limpia los recursos que creó la aplicación; para ello, elimina todo el recurso compartido de archivos mediante ShareClient.Delete.

Agregue este código al final de main():

std::cout << "Deleting files share: " << shareName << std::endl;
shareClient.DeleteIfExists();

Ejecución del código

Esta aplicación crea un contenedor y carga un archivo de texto en Azure Blob Storage. Luego, en el ejemplo se enumeran los blobs del contenedor, se descarga el archivo y se muestra su contenido. Por último, la aplicación elimina tanto el blob como el contenedor.

La salida de la aplicación es similar a la del ejemplo siguiente:

Azure Files Shares storage v12 - C++ quickstart sample
Creating files share: sample-share
Uploading file: sample-file
Listing file metadata...
key1:value1
key2:value2
Downloaded file contents: Hello Azure!
Deleting file: sample-file
Deleting files share: sample-share

Pasos siguientes

En este inicio rápido ha aprendido a cargar, descargar y enumerar archivos mediante C++. También ha aprendido a crear y eliminar un recurso compartido de archivos de Azure Storage.

Para ver un ejemplo de Blob Storage para C++, siga estos pasos: