List 如何列出Azure blob存储中的子目录

List 如何列出Azure blob存储中的子目录,list,azure,subdirectory,blobstorage,List,Azure,Subdirectory,Blobstorage,MS已经发布了类似目录的blob存储,我正在尝试将其作为目录使用。 已按名称保存一些blob: Common\Service1\Type1\Object1 Common\Service1\Type1\Object2 Common\Service1\Type2\Object1 Common\Service1\Type2\Object2 Common\Service1\Type3\Object1 Common\Service1\Type3\Object2 Common\Service1\Type3\

MS已经发布了类似目录的blob存储,我正在尝试将其作为目录使用。 已按名称保存一些blob:

Common\Service1\Type1\Object1
Common\Service1\Type1\Object2
Common\Service1\Type2\Object1
Common\Service1\Type2\Object2
Common\Service1\Type3\Object1
Common\Service1\Type3\Object2
Common\Service1\Type3\Object3

我希望能够枚举子目录,例如,我将blobclient引用到
Common
容器名称,并且我希望获得子容器列表
Type1、Type2、Type3
。是否可以获取某个目录中的子目录列表。使用ListBlobs返回当前容器中Blob的完整列表。

如果要列出“Common\Service1”目录中的所有“子目录”,可以使用以下方法:

    var directory = blobContainer.GetDirectoryReference(@"Common/Service1");
    var folders = directory.ListBlobs().Where(b => b as CloudBlobDirectory != null).ToList();
    foreach (var folder in folders)
    {
        Console.WriteLine(folder.Uri);
    }
完整代码示例:

    var random = new Random();
    CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
    var cloudBlobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer blobContainer = cloudBlobClient.GetContainerReference("test-container");
    blobContainer.CreateIfNotExists();
    string[] objects = new[]
                           {
                               @"Common\Service1\Type1\Object1", @"Common\Service1\Type1\Object2", @"Common\Service1\Type2\Object1",
                               @"Common\Service1\Type2\Object2", @"Common\Service1\Type3\Object1", @"Common\Service1\Type3\Object2",
                               @"Common\Service1\Type3\Object3"
                           };
    foreach (var newObject in objects)
    {
        var newBlob = blobContainer.GetBlockBlobReference(newObject);
        var buffer = new byte[1024];
        random.NextBytes(buffer);
        newBlob.UploadFromByteArray(buffer,0,buffer.Length);
    }

    var directory = blobContainer.GetDirectoryReference(@"Common/Service1");
    var folders = directory.ListBlobs().Where(b => b as CloudBlobDirectory != null).ToList();
    foreach (var folder in folders)
    {
        Console.WriteLine(folder.Uri);
    }
这将输出Type1、Type2和Type3目录的Uri。

基于:

  • 只有在使用
    \
    时才需要
    @
    ,而不是
    /
  • 不要在
    ListBlobs()之后链接
    ToList()
    。提供延迟加载,将为您提供更好的性能
  • 用于仅筛选出所需的类型
给你:

var directory = blobContainer.GetDirectoryReference("Common/Service1");
var folders = directory.ListBlobs().OfType<CloudBlobDirectory>();
foreach (var folder in folders)
{
    Console.WriteLine(folder.Uri);
}
var directory=blobContainer.GetDirectoryReference(“Common/Service1”);
var folders=directory.ListBlobs().OfType();
foreach(文件夹中的var文件夹)
{
Console.WriteLine(folder.Uri);
}

通过使用此选项,您可以在一个查询中获得所有文件名。

您是在谈论Blob存储还是Azure文件服务?@GauravMantri,Azure Blobstoraget您的代码输入错误,它使用
/
而不是反斜杠实际上不是。我不在乎如何获取blob
blobContainer的引用。GetBlockBlobReference
/
\
都可以工作,但出于某种原因,GetDirectoryReference需要与
\
一起使用(Uri样式),我想这与目录只是一个前缀有关,所有blob前缀都是以Uri格式存储的;谢谢
var nameList=logoContainer.ListBlobs().Where(b => b as CloudBlobDirectory != null).Select(x => x.Uri + "").ToList();