2017-04-09 7 views
2

メガバイトでハードドライブサイズを返すコードが非常に多くあります。 しかし私は簡単な質問があります。ハードドライブの工場サイズ - C#

256 GBのハードドライブを購入していますが、これらの方法は、たとえば234 GBを返します。 工場のサイズと実際のサイズには違いがあることは知っています。しかし、どうすれば工場サイズを取得できますか?任意のクラスまたはメソッド?または、私はちょうどswitch caseまたはif 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); 

これはGBにサイズを変換しますwmiと方法GetSizeを使用してハードドライブのサイズを取得する簡単な方法です。しかし、工場サイズはまったく返されません。

の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ギガバイトの240ギガバイトを返しますため、それは、例えば、正確なサイズ工場サイズに近い方ではなくなります。

+0

工場サイズは、それより大きなサイズのように見えるため、1024の代わりに1000の倍数で測定されることがよくあります。あなたはあなたがここにいるものに固執する方が良いです。 – DavidG

+0

@DavidGは、工場サイズを返す 'GetSize'メソッドを修正する方法はありますか? – Nofuzy

+0

GetSizeメソッドで1024を1000に置き換え、「工場」サイズを取得します。 –

答えて

3

ハードドライブは、ベース10で計算されたサイズで販売されているため、1000メガバイトは1ギガバイトです。技術的には、1024バイトは実際には1 mebibyteと呼ばれるはずですが、技術的なタイプは間違った用語を使用しています。

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]); 
} 

今、あなたが値を取得することができますので、あなたは簡単にパラメータとして、たとえばことを取るためにあなたのサイズ計算を修正することができる代わりに、1024のあなたは1000で割る必要があり、異なるサイズを計算する

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

質問の最新の編集では、1000で割っても、探している値は与えられませんが、ディスクのサイズに関する様々な程度の真実性を考慮してメソッドを拡張するために、+1がとられています。彼らはあなたが探している任意のディスクサイズを与えるマジックナンバーを見つけたら、3番目のenum値を追加するだけです。上記のあなたのコメントには、正確な数値を不正確な数値に変換しようとする前提に欠陥があることに同意します。 – BACON

+0

実際に使用できるスペースを「盗む」こともありますが、違いはここにあります。 – DavidG