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

Der*_*nch 8 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());
}
Run Code Online (Sandbox Code Playgroud)

Bob*_*ob. 13

按照MSDNCloudBloblContainer.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)

  • Bob我无法完全按照你所说的做(options.UseFlatBlobListing = true;)没有出现但是我这样做了:var blobs = container.ListBlobs(useFlatBlobListing:true); (4认同)
  • 使用最新的 Azure SDK,container.ListBlobs(prefix: "as needed", useFlatBlobListing: true) 可以工作。+1 @DermFrench (2认同)