如何使用Azure.Storage.Blobs库列出ADLS容器的第一级目录
解决方案
对于启用了分层命名空间的Azure Data Lake Storage,不要使用GetBlobs()方法拉取全量Blob,改用专门适配层级结构的GetBlobsByHierarchy方法即可实现非递归的第一级目录查询,示例代码如下:
using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; // 你的业务逻辑 public IList<string> GetFirstLevelFolders(BlobServiceClient blobServiceClient) { var blobContainerClient = blobServiceClient.GetBlobContainerClient("foo"); IList<string> firstLevelFolders = new List<string>(); // 指定分隔符为/,prefix为空代表从容器根目录开始遍历 var resultSegment = blobContainerClient.GetBlobsByHierarchy(delimiter: "/").AsPages(); foreach (Azure.Page<BlobHierarchyItem> blobPage in resultSegment) { foreach (var hierarchyItem in blobPage.Values) { // IsPrefix为true对应目录项 if (hierarchyItem.IsPrefix) { // 去掉路径末尾的/,直接返回目录名 firstLevelFolders.Add(hierarchyItem.Prefix.TrimEnd('/')); } } } return firstLevelFolders; }
说明
GetBlobsByHierarchy方法通过delimiter参数控制遍历层级,指定为/时只会返回当前层级的内容,不会递归拉取子目录下的文件和目录- 返回结果中的
BlobHierarchyItem包含两种类型:IsPrefix = true对应目录,IsBlob = true对应当前层级下的文件,如果你需要同时返回第一级文件,额外判断IsBlob取值即可 - 该方法在
Azure.Storage.Blobs 12.9.1版本中可直接使用,不需要额外安装其他依赖包
内容的提问来源于stack exchange,提问作者Vivere
相关产品推荐
相关产品推荐

