2017-07-03 67 views
1

我目前正在構建一個多租戶Web應用程序以在Azure中託管,這將使用Azure文件服務來存儲每個客戶端數據 - 將使用不同的文件共享每個客戶端提供隔離。如何獲取或計算Azure文件/共享或服務的大小

我的問題是 - 如何發現特定文件共享中所有文件的大小? (用於計費目的)。

我有PowerShell腳本等來計算Blob存儲的大小,但沒有文件存儲。有誰知道這是可能的,以及如何完成,最好從我的C#應用​​程序?

+0

你有沒有解決這個問題,你需要更多的幫助? –

回答

0

我有PowerShell腳本等來計算Blob存儲的大小,但沒有文件存儲。有誰知道這是可能的,以及如何完成,最好從我的C#應用​​程序?

你可以利用Microsoft Azure Configuration Manager Library for .NET和檢索粗糙使用一個特定的文件共享,如下所示:

CloudFileShare share = fileClient.GetShareReference("{your-share-name}"); 
ShareStats stats = share.GetStats(); 
Console.WriteLine("Current file share usage: {0} GB, maximum size: {1} GB", stats.Usage.ToString(), share.Properties.Quota); 

有關詳細信息,你可以參考Develop with File storage

結果:

Current file share usage: 1 GB, maximum size: 5120 GB 

你可以利用Microsoft Azure Storage Explorer來檢查你的文件共享的用法和配額如下:

enter image description here

而且,用於檢索的確切用法特定的文件共享,我假設你需要迭代文件共享下的文件和目錄並累積文件字節大小。我寫的代碼片段爲實現這一目的,你可以參考一下吧:

static void FileShareByteCount(CloudFileDirectory dir,ref long bytesCount) 
{ 
    FileContinuationToken continuationToken = null; 
    FileResultSegment resultSegment = null; 
    do 
    { 
     resultSegment = dir.ListFilesAndDirectoriesSegmented(100, continuationToken, null, null); 
     if (resultSegment.Results.Count() > 0) 
     { 
      foreach (var item in resultSegment.Results) 
      { 
       if (item.GetType() == typeof(CloudFileDirectory)) 
       { 
        var CloudFileDirectory = item as CloudFileDirectory; 
        Console.WriteLine($" List sub CloudFileDirectory with name:[{CloudFileDirectory.Name}]"); 
        FileShareByteCount(CloudFileDirectory,ref bytesCount); 
       } 
       else if (item.GetType() == typeof(CloudFile)) 
       { 
        var CloudFile = item as CloudFile; 
        Console.WriteLine($"file name:[{CloudFile.Name}],size:{CloudFile.Properties.Length}B"); 
        bytesCount += CloudFile.Properties.Length; 
       } 
      } 
     } 
    } while (continuationToken != null); 
} 

用法:

CloudFileShare share = fileClient.GetShareReference("logs"); 
CloudFileDirectory rootDir = share.GetRootDirectoryReference(); 
long bytesCount = 0; 
FileShareByteCount(rootDir, ref bytesCount); 
Console.WriteLine("Current file share usage: {0:f3} MB", bytesCount/(1024.0 * 1024.0)); 

enter image description here

+0

我已經更新了我的答案,併爲你添加了一些教程,你可以參考他們,任何疑慮,隨時讓我知道。 –

相關問題