container.ListBlobs给出了一个CloudBlobDirectory列表,我期待一个CloudBlockBlobs列表?

时间:2014-09-18 10:44:23

标签: c# azure-storage

我正在使用container.ListBlobs,但它似乎返回了一个列表{Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.LazyEnumerable}但是当我做foreach时,该对象似乎是CloudBlobDirectory而不是列表CloudBlockBlobs。我做错了什么,或者它应该归还什么?有什么方法可以得到一个blob列表,而不是blobdirectories?

var storageAccount = CloudStorageAccount.Parse(conn);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blobs = container.ListBlobs();
foreach (var blob in blobs)
{
   Console.WriteLine(blob.GetType().ToString());
}

1 个答案:

答案 0 :(得分:11)

根据CloudBloblContainer.ListBlobs()的{​​{3}}:

  

ListBlobs方法返回的对象类型取决于   正在执行的列表类型。如果使用UseFlatBlobListing   property设置为true,列表将返回一个可枚举的   CloudBlob对象的集合。如果UseFlatBlobListing设置为false   (默认值),列表可能会返回包含的集合   CloudBlob对象和CloudBlobDirectory对象。后一种情况   为虚拟blob上的后续枚举提供了便利   层次结构。

因此,如果您只想要blob,则必须将UseFlatBlobListing属性选项设置为true。

var storageAccount = CloudStorageAccount.Parse(conn);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
// ** new code below ** //
BlobRequestOptions options = new BlobRequestOptions();
options.UseFlatBlobListing = true;
// ** new code above ** //
var blobs = container.ListBlobs(options); // <-- add the parameter to overload
foreach (var blob in blobs)
{
    Console.WriteLine(blob.GetType().ToString());
}