我正在使用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());
}
Run Code Online (Sandbox Code Playgroud)
Bob*_*ob. 13
按照MSDN为CloudBloblContainer.ListBlobs():
ListBlobs方法返回的对象类型取决于正在执行的列表类型.如果UseFlatBlobListing属性设置为true,则列表将返回可枚举的CloudBlob对象集合.如果UseFlatBlobListing设置为false(默认值),则列表可能会返回包含CloudBlob对象和CloudBlobDirectory对象的集合.后一种情况为虚拟blob层次结构的后续枚举提供了便利.
因此,如果您只想要blob,则必须将UseFlatBlobListingproperty选项设置为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());
}
Run Code Online (Sandbox Code Playgroud)