Desenvolver para Ficheiros do Azure com C++

Dica

Experimentar o Explorador de Armazenamento do Microsoft Azure

O Explorador de Armazenamento do Microsoft Azure é uma aplicação autónoma e gratuita da Microsoft, que lhe permite trabalhar visualmente com dados do Armazenamento do Azure no Windows, macOS e Linux.

Aplica-se a

Tipo de partilhas de ficheiros SMB NFS
Partilhas de ficheiros Standard (GPv2), LRS/ZRS Yes No
Partilhas de ficheiros Standard (GPv2), GRS/GZRS Yes No
Partilhas de ficheiros Premium (FileStorage), LRS/ZRS Yes No

Acerca deste tutorial

Neste tutorial, irá aprender a realizar operações básicas no Ficheiros do Azure com C++. Se não estiver familiarizado com Ficheiros do Azure, analisar os conceitos nas secções que se seguem será útil para compreender os exemplos. Alguns dos exemplos abrangidos são:

  • Criar e eliminar partilhas de ficheiros do Azure
  • Criar e eliminar diretórios
  • Carregar, transferir e eliminar um ficheiro
  • Definir e listar os metadados de um ficheiro

Nota

Uma vez que Ficheiros do Azure podem ser acedidos através de SMB, é possível escrever aplicações simples que acedam à partilha de ficheiros do Azure com as classes e funções de E/S C++ padrão. Este artigo irá descrever como escrever aplicações que utilizam o SDK C++ do Armazenamento do Azure, que utiliza a API REST de Ficheiros para falar com Ficheiros do Azure.

Pré-requisitos

Configurar

Esta secção orienta-o ao longo da preparação de um projeto para trabalhar com a biblioteca de cliente Armazenamento de Blobs do Azure v12 para C++.

Instalar os pacotes

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

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

Para obter mais informações, visite o GitHub para adquirir e criar o SDK do Azure para C++.

Criar o projeto

No Visual Studio, crie uma nova aplicação de consola C++ para Windows denominada FilesShareQuickstartV12.

Caixa de diálogo do Visual Studio para configurar uma nova aplicação de consola do Windows C++

Copiar as credenciais do Portal do Azure

Quando a aplicação de exemplo faz um pedido ao Armazenamento do Azure, este tem de ser autorizado. Para autorizar um pedido, adicione as credenciais da conta de armazenamento à aplicação como uma cadeia de ligação. Para ver as credenciais da conta de armazenamento, siga estes passos:

  1. Inicie sessão no portal do Azure.

  2. Localize a sua conta de armazenamento.

  3. No painel de menus da conta de armazenamento, em Segurança + rede, selecione Chaves de acesso. Aqui, pode ver as chaves de acesso da conta e a cadeia de ligação completa para cada chave.

    Captura de ecrã que mostra onde estão as definições da chave de acesso no portal do Azure

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

  5. Na secção key1 , localize o valor cadeia de ligação . Selecione o ícone Copiar para a área de transferência para copiar a cadeia de ligação. Irá adicionar o valor da cadeia de ligação a uma variável de ambiente na secção seguinte.

    Captura de ecrã que mostra como copiar uma cadeia de ligação do portal do Azure

Configurar a cadeia de ligação de armazenamento

Depois de copiar a cadeia de ligação, escreva-a numa nova variável de ambiente no computador local que executa a aplicação. Para definir a variável de ambiente, abra uma janela da consola e siga as instruções relevantes para o seu sistema operativo. Substitua pela <yourconnectionstring> cadeia de ligação real.

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Depois de adicionar a variável de ambiente no Windows, tem de iniciar uma nova instância da janela de comandos.

Reiniciar programas

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

Exemplos de código

Estes fragmentos de código de exemplo mostram-lhe como realizar as seguintes tarefas com o Ficheiros do Azure Partilhar biblioteca de cliente para C++:

Adicionar ficheiros de inclusão

No diretório do projeto:

  1. Abra o ficheiro de solução FilesShareQuickstartV12.sln no Visual Studio.
  2. No Visual Studio, abra o ficheiro de origem FilesShareQuickstartV12.cpp .
  3. Remova qualquer código no interior main que tenha sido gerado automaticamente.
  4. Adicionar #include instruções.
#include <iostream>
#include <stdlib.h>
#include <vector>

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

Obter a cadeia de ligação

O código abaixo obtém a cadeia de ligação da sua conta de armazenamento a partir da variável de ambiente criada em Configurar a cadeia de ligação de armazenamento.

Adicione este código dentro de 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 uma Partilha de Ficheiros

Crie uma instância da classe ShareClient ao chamar a função CreateFromConnectionString . Em seguida, chame CreateIfNotExists para criar a partilha de ficheiros real na sua conta de armazenamento.

Adicione este código ao fim 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 ficheiros para uma Partilha de Ficheiros

O fragmento de código seguinte:

  1. Declara uma cadeia que contém "Olá Azure!".
  2. Obtém uma referência a um objeto ShareFileClient ao obter a raiz ShareDirectoryClient e, em seguida, chamar GetFileClient na partilha de ficheiros a partir da secção Criar uma Partilha de Ficheiros .
  3. Carrega a cadeia para o ficheiro ao chamar a função UploadFrom . Esta função cria o ficheiro se ainda não existir ou atualiza-o se existir.

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

Defina as propriedades de metadados de um ficheiro ao chamar a função ShareFileClient.SetMetadata .

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

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

Listar os metadados de um Ficheiro

Obtenha as propriedades de metadados de um ficheiro ao chamar a função ShareFileClient.GetProperties . Os metadados estão no Metadata campo do devolvido Value. Os metadados serão um par chave-valor, semelhante ao exemplo em Definir os metadados de um Ficheiro.

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

Transferir ficheiros

Depois de ter obtido as propriedades do ficheiro em Listar os metadados de um Ficheiro , um novo std::vector<uint8_t> objeto com as propriedades do ficheiro carregado. Transfira o ficheiro criado anteriormente para o novo std::vector<uint8_t> objeto ao chamar a função DownloadTo na classe base ShareFileClient . Por fim, apresente os dados de ficheiro transferidos.

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

Eliminar um ficheiro

O código seguinte elimina o blob da Partilha de Ficheiros de Armazenamento do Azure ao chamar a função ShareFileClient.Delete .

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

Eliminar uma partilha de ficheiros

O código seguinte limpa os recursos que a aplicação criou ao eliminar toda a Partilha de Ficheiros com o ShareClient. Eliminar.

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

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

Executar o código

Esta aplicação cria um contentor e carrega um ficheiro de texto para Armazenamento de Blobs do Azure. Em seguida, o exemplo lista os blobs no contentor, transfere o ficheiro e apresenta o conteúdo do ficheiro. Por fim, a aplicação elimina o blob e o contentor.

O resultado da aplicação é 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

Passos seguintes

Neste início rápido, aprendeu a carregar, transferir e listar ficheiros com C++. Também aprendeu a criar e eliminar uma Partilha de Ficheiros de Armazenamento do Azure.

Para ver um exemplo de Armazenamento de Blobs C++, continue para: