Azure存储容器大小

如何在Azure存储中获取容器大小? 我通过C#API访问Azure存储:

var account = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["AzureStoragePrimary"]); var client = account.CreateCloudBlobClient(); var container = client.GetContainerReference("myContainer"); 

 CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["AzureStoragePrimary"]); CloudBlobClient blobClient = account.CreateCloudBlobClient(); CloudBlobContainer blobContainer = blobClient.GetContainerReference("myContainer"); int fileSize = 0; foreach (var blobItem in blobContainer.ListBlobs()) { fileSize += blobItem.Properties.Length; } 

fileSize包含容器的大小,即包含的blob(文件)的总大小。

参考:CloudBlob: http : //msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.cloudblob_methods.aspx

我已将Windows Azure SDK中的Microsoft.WindowsAzure.StorageClient.dll 1.1.0.0更新为Windows Azure Storage NuGet包中的Microsoft.WindowsAzure.Storage.dll 2.0.0.0,现在可以正常使用。

 long size = 0; var list = container.ListBlobs(); foreach (CloudBlockBlob blob in list) { size += blob.Properties.Length; } 

一种可能更完整的方法。 关键的区别是listblobs()调用中的第二个参数,它强制执行一个平面列表:

 public class StorageReport { public int FileCount { get; set; } public int DirectoryCount { get; set; } public long TotalBytes { get; set; } } //embdeded in some method StorageReport report = new StorageReport() { FileCount = 0, DirectoryCount = 0, TotalBytes = 0 }; foreach (IListBlobItem blobItem in container.ListBlobs(null, true, BlobListingDetails.None)) { if (blobItem is CloudBlockBlob) { CloudBlockBlob blob = blobItem as CloudBlockBlob; report.FileCount++; report.TotalBytes += blob.Properties.Length; } else if (blobItem is CloudPageBlob) { CloudPageBlob pageBlob = blobItem as CloudPageBlob; report.FileCount++; report.TotalBytes += pageBlob.Properties.Length; } else if (blobItem is CloudBlobDirectory) { CloudBlobDirectory directory = blobItem as CloudBlobDirectory; report.DirectoryCount++; } } 

针对.NET Core 2, ListBlobs方法不可用,因为您只能访问异步方法。

因此,您可以使用ListBlobsSegmentedAsync方法获取Azure存储容器大小

 BlobContinuationToken continuationToken = null; long totalBytes = 0; do { var response = await container.ListBlobsSegmentedAsync(continuationToken); continuationToken = response.ContinuationToken; totalBytes += response.Results.OfType().Sum(s => s.Properties.Length); } while (continuationToken != null);