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

使用BlobContainerClient调用ListBlobsByHierarchy枚举ADLS根目录问题

解决ADLS HNS账户下BlobContainerClient枚举根目录丢失目录的问题

问题分析

在启用分层命名空间(HNS)的ADLS存储账户中,通过Azure门户创建的dir1是实际的目录资源,而非传统Blob存储的虚拟目录。默认调用ListBlobsByHierarchy并传入"/"作为分隔符时,该方法只会返回Blob对象(如blob1),不会主动包含HNS目录对象,导致根目录下的dir1无法被枚举到;而移除分隔符会遍历所有层级的对象,引发性能问题。

解决方案

调用ListBlobsByHierarchy时,显式指定包含目录对象的枚举特性,即可在分层枚举时同时获取根目录下的目录和Blob,无需遍历所有子资源。

示例代码(Azure.Storage.Blobs v12+)

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;

var connectionString = "your-storage-connection-string";
var containerName = "your-container-name";

var containerClient = new BlobContainerClient(connectionString, containerName);

// 枚举根目录,指定包含目录对象
var blobsAndDirectories = containerClient.ListBlobsByHierarchy(
    separator: "/",
    traits: BlobTraits.Directories, // 关键:指定包含目录
    states: BlobStates.None);

await foreach (var item in blobsAndDirectories)
{
    if (item.IsDirectory)
    {
        Console.WriteLine($"根目录下的目录:{item.Name}"); // 会输出 dir1/
    }
    else
    {
        Console.WriteLine($"根目录下的Blob:{item.Name}"); // 会输出 blob1
    }
}

说明

  • BlobTraits.Directories参数会告诉API在枚举时包含HNS目录对象,这样就能在根目录层级同时获取dir1和blob1。
  • 该方法仅枚举当前层级的对象,不会递归遍历子目录内容(如dir1/blob2),避免了性能损耗。

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:37:40