2017-04-09 57 views
2

有很多代碼塊可以返回兆字節中的硬盤大小。 但我有一個簡單的問題。硬盤驅動器的廠房大小 - C#

您購買了256 GB硬盤,但這些方法返回例如234 GB。 我知道工廠大小和確切大小之間存在差異。但我怎樣才能獲得工廠規模?任何類別或方法?或者我應該只使用switch caseif else並自己做?

 ManagementClass mc = new ManagementClass("Win32_DiskDrive"); 
     double MemSize = 0; 
     foreach (ManagementObject mo in mc.GetInstances()) 
     { 
      if (mo["InterfaceType"].ToString() == "IDE") 
      { 
       MemSize += Convert.ToInt64(mo["Size"].ToString()); 
       break; 
      } 
     } 
     return GetSize(MemSize); 

這是一個簡單的方法,讓使用wmi和方法GetSize將大小轉換爲GB硬盤大小。但它根本不會返回Factory Size。

getSize方法對應:

public string GetSize(double len) 
    { 
     string[] sizes = { "B", "KB", "MB", "GB", "TB" }; 
     int order = 0; 
     while (len >= 1024 && order < sizes.Length - 1) 
     { 
      order++; 
      len = len/1024; 
     } 
     return String.Format("{0:0.##} {1}", Math.Floor(len), sizes[order]); 

如果我除以1000的大小,它會更接近廠房面積,但沒有確切的尺寸,例如256 GB將返回240 GB。

+0

工廠大小通常(總是?)以1000的倍數而不是1024來測量,因爲它看起來像一個比它大的大小。你最好堅持你在這裏的東西。 – DavidG

+0

@DavidG有沒有辦法修復返回工廠大小的GetSize方法? – Nofuzy

+0

只需在您的GetSize方法中將1000替換爲1000即可獲得「工廠」大小。 –

回答

3

硬盤驅動器以10爲底的計算尺寸銷售,所以1000兆字節是1千兆字節。從技術上講,我們作爲技術類型無論如何都使用錯誤的術語,因爲1024字節實際上應該稱爲1 mebibyte

所以要計算你需要1000的不同來劃分的大小,而不是1024,您可以輕鬆地修改您的大小計算把這個當作一個參數,例如:

public enum SizeType 
{ 
    Actual = 1024, 
    Factory = 1000 
} 

public string GetSize(double len, SizeType sizeType) 
{ 
    string[] sizes = { "B", "KB", "MB", "GB", "TB" }; 
    int order = 0; 
    while (len >= (int)sizeType && order < sizes.Length - 1) 
    { 
     order++; 
     len = len/(int)sizeType; 
    } 
    return String.Format("{0:0.##} {1}", Math.Floor(len), sizes[order]); 
} 

現在你可以得到的值像這樣:

var actual = GetSize(bytes, SizeType.Actual); 
var factory = GetSize(bytes, SizeType.Factory); 
+1

這個問題最近的編輯增加了除以1000仍然不會給他們任何值他們正在尋找,但+1,無論如何,擴大他們的方法來說明不同程度的磁盤大小真實性。一旦他們計算出魔術數字,他們只需要添加第三枚枚舉值,以便爲他們提供他們正在尋找的任意磁盤大小。我同意你上面的評論,試圖將準確數字轉換爲不準確數字的前提是有缺陷的。 – BACON

+0

也有各種各樣的東西可以「偷走」你實際可以使用的空間,這可能是差異在這裏。 – DavidG