2013-01-17 120 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