You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SDK for C++中使用ListBlobsByHierarchy如何获取由Blob路径隐含的folder1?

Azure SDK for C++中使用ListBlobsByHierarchy如何获取由Blob路径隐含的folder1?

嘿,我之前也碰到过一模一样的问题!其实Azure Blob存储里的“文件夹”本质都是路径前缀,并没有真正的实体文件夹——除非你特意上传一个零大小的Blob(比如命名为folder1/)来标记虚拟目录。不过别担心,ListBlobsByHierarchy完全能帮你拿到那些由Blob路径隐含的前缀(比如你说的folder1),关键是要正确配置参数并处理返回结果里的前缀集合。

核心思路

ListBlobsByHierarchy的Delimiter参数是关键:当你把它设置为"/"时,Azure存储服务会自动按路径分隔符拆分所有Blob的路径,返回当前层级的所有前缀(也就是你要的“隐含文件夹”)和Blob。这些前缀会被放在返回结果的BlobPrefixes集合里,而不是Blobs集合中——这可能是你之前没注意到的点。

具体代码示例

下面是一个完整的C++示例,展示如何获取根目录下的所有隐含文件夹:

#include <azure/storage/blobs.hpp>
#include <iostream>
#include <string>

int main() {
    // 替换成你的存储账户连接字符串和容器名称
    std::string connectionString = "DefaultEndpointsProtocol=https;AccountName=your_account;AccountKey=your_key;EndpointSuffix=core.windows.net";
    std::string containerName = "your_container";

    // 初始化Blob容器客户端
    Azure::Storage::Blobs::BlobContainerClient containerClient(connectionString, containerName);

    // 配置ListBlobsByHierarchy参数:分隔符设为"/",遍历根目录
    Azure::Storage::Blobs::ListBlobsByHierarchyOptions listOptions;
    listOptions.Delimiter = "/";

    // 调用接口并获取结果
    auto listResult = containerClient.ListBlobsByHierarchy(listOptions);

    // 遍历返回的前缀集合,提取文件夹名
    std::cout << "根目录下的隐含文件夹:" << std::endl;
    for (const auto& prefix : listResult.BlobPrefixes) {
        // 前缀格式是"folder1/",去掉末尾的"/"得到纯文件夹名
        std::string folderName = prefix.Name.substr(0, prefix.Name.length() - 1);
        std::cout << "- " << folderName << std::endl;
    }

    return 0;
}

额外说明

  1. 为什么这个方法高效?
    这是服务器端的过滤逻辑,Azure存储服务会直接返回拆分后的前缀,不需要你下载整个容器的所有Blob元数据,性能比自己用ListBlobs手动过滤好太多。

  2. 如何遍历子文件夹?
    比如你想获取folder1下的子文件夹,只需要把listOptions.Prefix设置为"folder1/",再调用一次ListBlobsByHierarchy即可,返回的BlobPrefixes就是folder1下的所有子前缀(比如folder1/folder2/)。

  3. 区分虚拟目录和隐含前缀?
    其实不需要特意区分——不管是你手动创建的虚拟目录(零大小Blob)还是由Blob路径隐含的前缀,都会通过BlobPrefixes返回给你。如果需要判断是否存在对应的虚拟目录Blob,可以额外调用containerClient.GetBlobClient(prefix.Name).Exists()来验证。

这个方法应该能完美解决你的问题,比自己折腾ListBlobs过滤省心多啦!

备注:内容来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:35:28