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 | ||
Compartilhamentos de arquivos padrão (GPv2), GRS/GZRS | ||
Compartilhamento de arquivos premium (FileStorage), LRS/ZRS |
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
- Assinatura do Azure
- Conta de Armazenamento do Azure
- Compilador C++
- CMake
- Gerenciador de pacotes Vcpkg-C e C++
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.
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:
Entre no portal do Azure.
Localize sua cadeia de conexão.
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.
No painel Chaves de acesso, selecione Mostrar chaves.
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.
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
- Obter a cadeia de conexão
- Criar um compartilhamento de arquivos
- Carregar arquivos em um compartilhamento de arquivos
- Definir os metadados de um arquivo
- Listar os metadados de um arquivo
- Baixar arquivos
- Excluir um arquivo
- Excluir um compartilhamento de arquivos
Adicionar arquivos de inclusão
No diretório do projeto:
- Abra o arquivo da solução FilesShareQuickstartV12.sln no Visual Studio.
- Dentro do Visual Studio, abra o arquivo de origem do FilesShareQuickstartV12.cpp.
- Remova qualquer código dentro de
main
que foi gerado automaticamente. - 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:
- Declara uma string contendo "Olá, Azure!".
- 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.
- 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: