Desenvolvimento para o Arquivos do Azure com C++

Dica

Experimente usar o Gerenciador de Armazenamento do Microsoft Azure

O Gerenciador de Armazenamento do Microsoft Azure é um aplicativo autônomo e gratuito da Microsoft que possibilita o trabalho visual com os dados do Armazenamento do Azure no Windows, MacOS e Linux.

Aplica-se a

Tipo de compartilhamento de arquivos SMB NFS
Compartilhamentos de arquivos padrão (GPv2), LRS/ZRS Sim Não
Compartilhamentos de arquivos padrão (GPv2), GRS/GZRS Sim Não
Compartilhamento de arquivos premium (FileStorage), LRS/ZRS Sim Não

Sobre este tutorial

Neste tutorial, você aprenderá a executar operações básicas no Arquivos do Azure usando C++. Se você for novo no Arquivos do Azure, será muito útil percorrer os conceitos nas seções a seguir para entender os exemplos. Alguns dos exemplos abordados são:

  • Criar e excluir Compartilhamentos de Arquivos do Azure
  • Criar e excluir diretórios
  • Carregar, baixar e excluir um arquivo
  • Definir e listar os metadados de um arquivo

Observação

Como o Arquivos do Azure pode ser acessado via SMB, é possível criar aplicativos simples que acessam o Compartilhamento de Arquivos do Azure usando as classes e funções padrão de E/S do C++. Este artigo descreverá como criar aplicativos que usam o SDK do Armazenamento do Azure C++, que usa a API REST de Arquivo para se comunicar com o Arquivos do Azure.

Pré-requisitos

Configurando

Esta seção fornece instruções sobre como preparar um projeto para funcionar com a biblioteca de clientes do Armazenamento de Blobs do Azure v12 para C++.

Instalar os pacotes

O comando vcpkg install instalará o SDK dos Blobs de Armazenamento do Microsoft Azure para C++ e as dependências necessárias:

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

Para obter mais informações, vá para GitHub para adquirir e compilar o SDK Azure para C++.

Criar o projeto

No Visual Studio, crie um novo aplicativo de console C++ para o Windows chamado FilesShareQuickstartV12.

Caixa de diálogo do Visual Studio para configurar um novo aplicativo de console C++ do Windows

Copiar suas credenciais no Portal do Azure

Quando o aplicativo de exemplo faz uma solicitação para o Armazenamento do Azure, ele precisa ser autorizado. Para autenticar uma solicitação, adicione suas credenciais da conta de armazenamento ao aplicativo como uma cadeia de conexão. Para ver as credenciais da conta de armazenamento, siga estas etapas:

  1. Entre no portal do Azure.

  2. Localize sua cadeia de conexão.

  3. No painel do menu da conta de armazenamento, em Segurança + rede, selecione Chaves de acesso. Aqui, você pode ver as chaves de acesso da conta, bem como a cadeia de conexão completa para cada chave.

    Captura de tela que mostra onde as configurações da chave de acesso estão na portal do Azure

  4. No painel Chaves de acesso, selecione Mostrar chaves.

  5. Na seção key1, localize o valor Cadeia de conexão. Selecione o ícone Copiar para a área de transferência para copiar a cadeia de conexão. Você adicionará o valor da cadeia de conexão a uma variável de ambiente na próxima seção.

    Captura de tela mostrando como copiar uma cadeia de conexão do portal do Azure

Configurar a cadeia de conexão de armazenamento

Depois de copiar a cadeia de conexão, grave em uma nova variável de ambiente no computador local que executa o aplicativo. Para definir a variável de ambiente, abra uma janela de console e siga as instruções do seu sistema operacional. Substitua <yourconnectionstring> pela cadeia de conexão real.

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Após adicionar a variável de ambiente no Windows, é necessário iniciar uma nova instância da janela de comando.

Reiniciar programas

Depois de adicionar a variável de ambiente, reinicie todos os programas em execução que precisarem ler a variável de ambiente. Por exemplo, reinicie seu ambiente ou editor de desenvolvimento antes de continuar.

Exemplos de código

Esses snippets de código de exemplo mostram como fazer as seguintes tarefas com a biblioteca de clientes do compartilhamento de arquivos do Azure para C++:

Adicionar arquivos de inclusão

No diretório do projeto:

  1. Abra o arquivo da solução FilesShareQuickstartV12.sln no Visual Studio.
  2. Dentro do Visual Studio, abra o arquivo de origem do FilesShareQuickstartV12.cpp.
  3. Remova qualquer código dentro de main que foi gerado automaticamente.
  4. Adicione instruções #include.
#include <iostream>
#include <stdlib.h>
#include <vector>

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

Obtenha a cadeia de conexão

O código a seguir recupera a cadeia de conexão da conta de armazenamento a partir da variável de ambiente criada em Configurar a cadeia de conexão do armazenamento.

Adicione 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

Criar um compartilhamento de arquivos

Crie uma instância da classe ShareClient chamando a função CreateFromConnectionString. Em seguida, chame CreateIfNotExists para criar o compartilhamento de arquivos real em sua conta de armazenamento.

Adicione este código ao 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();

Carregar arquivos em um compartilhamento de arquivos

O trecho de código a seguir:

  1. Declara uma string contendo "Olá, Azure!".
  2. Obtém uma referência a um objeto ShareFileClient obtendo a raiz ShareDirectoryClient e, em seguida, chamando GetFileClient no compartilhamento de arquivos da seção Criar um compartilhamento de arquivos.
  3. Carrega a cadeia de caracteres no arquivo chamando a função UploadFrom. Essa operação criará o arquivo se ele ainda não existir e o substituirá, se já existir.

Adicione este código ao 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));

Definir os metadados de um arquivo

Defina as propriedades de metadados para um arquivo chamando a função ShareFileClient.SetMetadata.

Adicione este código ao final de main():

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

Listar os metadados de um arquivo

Obtenha as propriedades de metadados para um arquivo chamando a função ShareFileClient.GetProperties. Os metadados estão sob o campo Metadata do Value retornado. Os metadados serão um par chave-valor, semelhante ao exemplo em Definir os metadados de um arquivo.

// 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;
}

Baixar arquivos

Depois de recuperar as propriedades do arquivo em Listar os metadados de um arquivo, um novo objeto std::vector<uint8_t> usando as propriedades do arquivo carregado. Baixe o arquivo criado anteriormente no novo objeto std::vector<uint8_t> chamando a função DownloadTo na classe base ShareFileClient. Por fim, exiba os dados de arquivos baixados.

Adicione este código ao 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;

Excluir um arquivo

O código a seguir exclui o blob do compartilhamento de arquivos de Armazenamento do Microsoft Azure chamando a função ShareFileClient.Delete.

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

Excluir um compartilhamento de arquivos

O código a seguir limpa os recursos que o aplicativo criou excluindo todo o compartilhamento de arquivo com ShareClient.Delete.

Adicione este código ao final de main():

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

Executar o código

Esse aplicativo cria um contêiner e carrega um arquivo de texto para o armazenamento de Blob do Azure. Em seguida, lista os blobs no contêiner, baixa o arquivo e exibe o conteúdo do arquivo. Por fim, o aplicativo exclui o blob e o contêiner.

A saída do aplicativo é semelhante ao seguinte exemplo:

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

Próximas etapas

Neste início rápido você aprendeu a carregar, baixar e listar arquivos usando C++. Você também aprendeu a criar e excluir um compartilhamento de arquivos de Armazenamento do Microsoft Azure.

Para ver o exemplo de armazenamento de blob C++, prossiga para: