Partilhar via


Acrescentar dados a um blob de acréscimo com .NET

Pode acrescentar dados a um blob ao criar um blob de acréscimo. Os blobs de acréscimo são compostos por blocos, de forma semelhante aos blobs de blocos, mas estão otimizados para operações de acréscimo. Os blobs de acréscimo são ideais para cenários como o registo de dados a partir de máquinas virtuais.

Nota

Os exemplos neste artigo partem do princípio de que criou um objeto BlobServiceClient com a documentação de orientação no artigo Introdução ao Armazenamento de Blobs do Azure e .NET. Os blobs no Armazenamento do Azure estão organizados em contentores. Antes de poder carregar um blob, primeiro tem de criar um contentor. Para saber como criar um contentor, veja Criar um contentor no Armazenamento do Azure com .NET.

Criar um blob de acréscimo e acrescentar dados

Utilize estes métodos para criar um blob de acréscimo.

Utilize qualquer um destes métodos para acrescentar dados a esse blob de acréscimo:

O tamanho máximo em bytes de cada operação de acréscimo é definido pela propriedade AppendBlobMaxAppendBlockBytes . O exemplo seguinte cria um blob de acréscimo e acrescenta dados de registo a esse blob. Este exemplo utiliza a propriedade AppendBlobMaxAppendBlockBytes para determinar se são necessárias várias operações de acréscimo.

static async Task AppendToBlob(
    BlobContainerClient containerClient,
    MemoryStream logEntryStream,
    string logBlobName)
{
    AppendBlobClient appendBlobClient = containerClient.GetAppendBlobClient(logBlobName);

    await appendBlobClient.CreateIfNotExistsAsync();

    int maxBlockSize = appendBlobClient.AppendBlobMaxAppendBlockBytes;
    long bytesLeft = logEntryStream.Length;
    byte[] buffer = new byte[maxBlockSize];
    while (bytesLeft > 0)
    {
        int blockSize = (int)Math.Min(bytesLeft, maxBlockSize);
        int bytesRead = await logEntryStream.ReadAsync(buffer.AsMemory(0, blockSize));
        await using (MemoryStream memoryStream = new MemoryStream(buffer, 0, bytesRead))
        {
            await appendBlobClient.AppendBlockAsync(memoryStream);
        }
        bytesLeft -= bytesRead;
    }
}

Ver também