2013-01-17 13 views
7

Jak mogę uzyskać rozmiar kontenera w usłudze Azure Storage? Dostęp Azure przechowywania przez C# API:Rozmiar kontenera Azure Storage

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

czy na pewno używasz C#? 'var account'? – Raptor

Odpowiedz

5

I zostały zaktualizowane Microsoft.WindowsAzure.StorageClient.dll 1.1.0.0 z Windows Azure SDK do Microsoft.WindowsAzure.Storage.dll 2.0.0.0 z Windows Azure Storage Pakiet NuGet i działa teraz.

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

jaka jest wartość zwracana? kb? mb? – Rod

+1

Jednostką właściwości "Długość" jest * bajt *. –

7
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 zawiera rozmiar pojemnika, to znaczy całkowita wielkość bąbli (plików) zawartego.

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

+1

To 'long size = 0; foreach (var blob w container.ListBlobs()) {size + = container.GetBlobReference (blob.Uri.AbsoluteUri) .Properties.Length; } 'zwraca zawsze 0. –

5

potencjalnie pełniejsze podejście. Podstawową różnicą jest drugi parametr wywołania listblobs() wymuszający wprowadzenie płaskiej listy:

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++; 
    }       
} 
+0

To jest świetne! Udało się to z ponad 6 TB danych i milionów plików –

+0

@ ElliotWood, który jest dziki! Cieszę się, że wstał. – pimbrouwers

Powiązane problemy