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

# 获取 Title Storage blob 元数据

> 使用 XblTitleStorageGetBlobMetadataAsync 检索 XBOX Title Storage blob 元数据的扁平 C 代码示例,包含分页遍历结果句柄。

本主题演示如何使用以下扁平 C 代码示例从 XBOX Title Storage 检索 blob 元数据。

#### Flat C

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock };
    XblTitleStorageBlobMetadataResultHandle handle;
    HRESULT hr = XblTitleStorageGetBlobMetadataResult(asyncBlock, &handle);

    if (SUCCEEDED(hr))
    {
        if (blobMetadataResultHandle != nullptr)
        {
            XblTitleStorageBlobMetadataResultCloseHandle(blobMetadataResultHandle);
        }

        blobMetadataResultHandle = handle;
    }

};

HRESULT hr = XblTitleStorageGetBlobMetadataAsync(
    xboxLiveContext,
    scid,
    storageType,
    blobPath.c_str(),
    xboxUserId,
    skipItems,
    maxItems,
    asyncBlock.get()
);

if (SUCCEEDED(hr))
{
    asyncBlock.release();
}
```

## 仅存在一页 XblTitleStorageBlobMetadata 对象

下面的代码示例演示了如何使用 `XblTitleStorageBlobMetadataResultHandle` 来检索 [XblTitleStorageBlobMetadata](/reference/live/xsapi-c/title_storage_c/structs/xbltitlestorageblobmetadata) 对象列表的第一页。
<Note>根据 title 在 Title Storage 中的 blob 数量,可能会有多页 `XblTitleStorageBlobMetadata`。</Note>

#### Flat C

```cpp theme={null}
XblTitleStorageBlobMetadataResultHandle handle = blobMetadataResultHandle;

const XblTitleStorageBlobMetadata* items;
size_t itemsSize;

HRESULT hr = XblTitleStorageBlobMetadataResultGetItems(handle, &items, &itemsSize);
```

## 判断是否存在更多页的 XblTitleStorageBlobMetadata 对象

下面的代码示例演示如何检查是否有更多页的 `XblTitleStorageBlobMetadata` 可从 Title Storage 检索。

#### Flat C

```cpp theme={null}
XblTitleStorageBlobMetadataResultHandle handle = blobMetadataResultHandle;

bool hasNext;

HRESULT hr = XblTitleStorageBlobMetadataResultHasNext(handle, &hasNext);
```

## 检索更多页的 XblTitleStorageBlobMetadata 对象

下面的代码示例演示如何检索下一页 `XblTitleStorageBlobMetadata` 对象。

#### Flat C

```cpp theme={null}
XblTitleStorageBlobMetadataResultHandle handle = blobMetadataResultHandle;

auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock };
    XblTitleStorageBlobMetadataResultHandle handle{ nullptr };
    
    HRESULT hr = XblTitleStorageBlobMetadataResultGetNextResult(asyncBlock, &handle);
};

HRESULT hr = XblTitleStorageBlobMetadataResultGetNextAsync(handle, maxItems, asyncBlock.get());

if (SUCCEEDED(hr))
{
    asyncBlock.release();
}
```

## 复制 XblTitleStorageBlobMetadataResultHandle

下面的代码示例演示如何创建 `XblTitleStorageBlobMetadataResultHandle` 的副本。

#### Flat C

```cpp theme={null}
XblTitleStorageBlobMetadataResultHandle handle = blobMetadataResultHandle;
XblTitleStorageBlobMetadataResultHandle duplicatedHandle;

HRESULT hr = XblTitleStorageBlobMetadataResultDuplicateHandle(handle, &duplicatedHandle);
```

## 关闭 XblTitleStorageBlobMetadataResultHandle

下面的代码示例演示如何关闭 `XblTitleStorageBlobMetadataResultHandle`。

<Note>使用完该句柄后必须将其关闭。</Note>

#### Flat C

```cpp theme={null}
XblTitleStorageBlobMetadataResultHandle handle = blobMetadataResultHandle;
XblTitleStorageBlobMetadataResultCloseHandle(handle);
blobMetadataResultHandle = nullptr;
```

## 另请参阅

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

[XblTitleStorageBlobMetadataResultCloseHandle](/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageblobmetadataresultclosehandle)

[XblTitleStorageGetBlobMetadataAsync](/reference/live/xsapi-c/title_storage_c/functions/xbltitlestoragegetblobmetadataasync)

[XblTitleStorageGetBlobMetadataResult](/reference/live/xsapi-c/title_storage_c/functions/xbltitlestoragegetblobmetadataresult)

[XblTitleStorageBlobMetadata](/reference/live/xsapi-c/title_storage_c/structs/xbltitlestorageblobmetadata)

[XblTitleStorageBlobMetadataResultGetItems](/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageblobmetadataresultgetitems)

[XblTitleStorageBlobMetadataResultHasNext](/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageblobmetadataresulthasnext)

[XblTitleStorageBlobMetadataResultGetNextAsync](/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageblobmetadataresultgetnextasync)

[XblTitleStorageBlobMetadataResultGetNextResult](/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageblobmetadataresultgetnextresult)

[XblTitleStorageBlobMetadataResultDuplicateHandle](/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageblobmetadataresultduplicatehandle)


## Related topics

- [Title Storage 示例代码](/zh-CN/services/xbox-services/storage/title-storage/how-to/live-title-storage-howto-nav.md)
- [从 Title Storage 下载 blob](/zh-CN/services/xbox-services/storage/title-storage/how-to/live-downloading-title-storage-blob.md)
- [XblTitleStorageGetBlobMetadataAsync](/zh-CN/reference/live/xsapi-c/title_storage_c/functions/xbltitlestoragegetblobmetadataasync.md)
- [XblTitleStorageDownloadBlobAsync](/zh-CN/reference/live/xsapi-c/title_storage_c/functions/xbltitlestoragedownloadblobasync.md)
- [XblTitleStorageBlobMetadata](/zh-CN/reference/live/xsapi-c/title_storage_c/structs/xbltitlestorageblobmetadata.md)
