List 如何列出Azure blob存储中的子目录
MS已经发布了类似目录的blob存储,我正在尝试将其作为目录使用。 已按名称保存一些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\
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您的代码输入错误,它使用
/
而不是反斜杠实际上不是。我不在乎如何获取blobblobContainer的引用。GetBlockBlobReference
,/
和\
都可以工作,但出于某种原因,GetDirectoryReference需要与\
一起使用(Uri样式),我想这与目录只是一个前缀有关,所有blob前缀都是以Uri格式存储的;谢谢
var nameList=logoContainer.ListBlobs().Where(b => b as CloudBlobDirectory != null).Select(x => x.Uri + "").ToList();