> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Baixar um blob do Title Storage

> Exemplo de código C simples para baixar um blob do Title Storage dos serviços XBOX usando XblTitleStorageDownloadBlobAsync, com orientações sobre o tamanho do buffer e do bloco.

Este tópico demonstra como baixar um blob do Title Storage dos serviços XBOX usando o exemplo de código C simples a seguir.

## Observações sobre os parâmetros de XblTitleStorageDownloadBlobAsync

* O buffer que você fornece para armazenar os dados do blob baixado deve ser grande o suficiente para armazenar o blob que está sendo baixado. Se necessário, você pode recuperar o tamanho necessário para o buffer obtendo os metadados do blob.

* Essa API retorna E\_NOT\_SUFFICIENT\_BUFFER (0x8007007A) se `blobBuffer` não tiver capacidade suficiente para armazenar os dados do blob.

* Para usar o tamanho padrão, passe 0 para `preferredDownloadBlockSize`.

#### C simples

```cpp theme={null}
std::unique_ptr<std::vector<uint8_t>> downloadBlobBuffer = std::make_unique<std::vector<uint8_t>>(blobMetadata.length);

auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = downloadBlobBuffer.get();
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock };   // Take over ownership of XAsyncBlock*.
    std::unique_ptr<std::vector<uint8_t>> downloadBlobBuffer{ static_cast<std::vector<uint8_t>*>(asyncBlock->context) };
    HRESULT hr = XblTitleStorageDownloadBlobResult(asyncBlock, &blobMetadata);
};

HRESULT hr = XblTitleStorageDownloadBlobAsync(
    xboxLiveContext,
    blobMetadata,
    downloadBlobBuffer->data(),
    blobMetadata.length,
    XblTitleStorageETagMatchCondition::NotUsed,
    selectQuery.c_str(),   // Optional  .
    preferredDownloadBlockSize,   // Optional.
    asyncBlock.get()
);

if (SUCCEEDED(hr))
{
    // The call succeeded, so release std::unique_ptr ownership of XAsyncBlock* because
    // the callback takes over ownership. If the call fails, however, std::unique_ptr keeps
    // ownership and deletes XAsyncBlock*.
    asyncBlock.release();
    downloadBlobBuffer.release();
}
```

## Veja também

[XAsyncBlock](/pt-BR/reference/system/xasync/structs/xasyncblock)

[XblTitleStorageDownloadBlobAsync](/pt-BR/reference/live/xsapi-c/title_storage_c/functions/xbltitlestoragedownloadblobasync)

[XblTitleStorageDownloadBlobResult](/pt-BR/reference/live/xsapi-c/title_storage_c/functions/xbltitlestoragedownloadblobresult)

[XblTitleStorageETagMatchCondition](/pt-BR/reference/live/xsapi-c/title_storage_c/enums/xbltitlestorageetagmatchcondition)


## Related topics

- [Código de exemplo do Title Storage](/pt-BR/services/xbox-services/storage/title-storage/how-to/live-title-storage-howto-nav.md)
- [Instruções](/pt-BR/services/xbox-services/storage/title-storage/how-to/index.md)
- [Excluir um blob do Title Storage](/pt-BR/services/xbox-services/storage/title-storage/how-to/live-deleting-title-storage-blob.md)
- [Carregar um blob no Title Storage](/pt-BR/services/xbox-services/storage/title-storage/how-to/live-uploading-title-storage-blob.md)
- [Obter metadados de blobs do Title Storage](/pt-BR/services/xbox-services/storage/title-storage/how-to/live-getting-title-storage-blob-metadata.md)
