2013-01-17 218 views
7

如何獲取Azure存儲容器的大小?我通過C#API訪問Azure存儲:Azure存儲容器大小

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

您確定您使用的是C#嗎? 'var account'? – Raptor

回答

5

我從的Windows Azure存儲更新Microsoft.WindowsAzure.StorageClient.dll 1.1.0.0從Windows Azure的SDK來Microsoft.WindowsAzure.Storage.dll 2.0.0.0 NuGet包,它現在可以工作。

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

什麼值返回? KB? mb個? – Rod

+1

Length屬性的單位是* bytes *。 –

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包含容納容器的大小,即斑點(文件)的總大小。

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

+1

這個'長尺碼= 0; foreach(var blob in container.ListBlobs()){size + = container.GetBlobReference(blob.Uri.AbsoluteUri).Properties.Length; }'返回總是0. –

5

A 潛在的更完整的方法。關鍵區別在於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++; 
    }       
} 
+0

這太棒了!它在超過6TB的數據和數百萬個文件方面做到了訣竅 –

+0

@ElliotWood很瘋狂!很高興它站起來。 – pimbrouwers