7

I'm creating a .net wrapper service for my application that utilizes Azure Blob Storage as a file store. My application creates a new CloudBlobContainer for each "account" on my system. Each account is limited to a maximum amount of storage.

What is the simplest and most efficient way to query the current size (space utilization) of an Azure CloudBlobContainer`?

Andrew Barber
  • 39,603
  • 20
  • 94
  • 123
kmehta
  • 2,457
  • 6
  • 31
  • 37
  • Possible duplicate of [Azure Storage container size](https://stackoverflow.com/questions/14376459/azure-storage-container-size) – Azaz ul Haq Jan 14 '19 at 13:25

2 Answers2

14

FYI here's the answer. Hope this helps.

public static long GetSpaceUsed(string containerName)
{
    var container = CloudStorageAccount
        .Parse(ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString)
        .CreateCloudBlobClient()
        .GetContainerReference(containerName);
    if (container.Exists())
    {
        return (from CloudBlockBlob blob in
                container.ListBlobs(useFlatBlobListing: true)
                select blob.Properties.Length
               ).Sum();
    }
    return 0;
}
Rob
  • 45,296
  • 24
  • 122
  • 150
kmehta
  • 2,457
  • 6
  • 31
  • 37
4

As of version v9.x.x.x or greater of WindwosAzure.Storage.dll (from Nuget package), ListBlobs method is no longer available publicly. So the solution for applications targeting .NET Core 2.x+ would be like following:

BlobContinuationToken continuationToken = null;
long totalBytes = 0;
do
{
    var response = await container.ListBlobsSegmentedAsync(continuationToken);
    continuationToken = response.ContinuationToken;
    totalBytes += response.Results.OfType<CloudBlockBlob>().Sum(s => s.Properties.Length);
} while (continuationToken != null);
Azaz ul Haq
  • 1,635
  • 2
  • 18
  • 46