> ## 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.

# Descarga de un blob del almacenamiento de títulos

> Ejemplo de código C plano para descargar un blob del almacenamiento de títulos de los servicios XBOX mediante XblTitleStorageDownloadBlobAsync, con orientación sobre el tamaño del búfer y el tamaño de bloque.

En este tema se muestra cómo descargar un blob del almacenamiento de títulos de los servicios XBOX mediante el siguiente ejemplo de código C plano.

## Notas sobre los parámetros de XblTitleStorageDownloadBlobAsync

* El búfer que proporcione para almacenar los datos del blob descargado debe ser lo suficientemente grande para almacenar el blob que se descarga. Si lo necesita, puede recuperar la longitud necesaria para el búfer obteniendo los metadatos del blob.

* Esta API devuelve E\_NOT\_SUFFICIENT\_BUFFER (0x8007007A) si `blobBuffer` no tiene capacidad suficiente para contener los datos del blob.

* Para usar el tamaño predeterminado, pase 0 en `preferredDownloadBlockSize`.

#### C plano

```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();
}
```

## Consulte también

[XAsyncBlock](/reference/system/xasync/structs/xasyncblock)

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

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

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


## Related topics

- [Código de ejemplo del almacenamiento de títulos](/es/services/xbox-services/storage/title-storage/how-to/live-title-storage-howto-nav.md)
- [Procedimientos](/es/services/xbox-services/storage/title-storage/how-to/index.md)
- [Eliminación de un blob del almacenamiento de títulos](/es/services/xbox-services/storage/title-storage/how-to/live-deleting-title-storage-blob.md)
- [Obtención de los metadatos de un blob del almacenamiento de títulos](/es/services/xbox-services/storage/title-storage/how-to/live-getting-title-storage-blob-metadata.md)
- [Carga de un blob en el almacenamiento de títulos](/es/services/xbox-services/storage/title-storage/how-to/live-uploading-title-storage-blob.md)
