C#プロジェクトのDriveInfoクラスを使用して、特定のドライブで利用可能なバイトを取得しています。この数値をメガバイトまたはギガバイトに正しく変換するにはどうすればよいですか? 1024で除算しても、私が推測する仕事はできません。結果は常にWindowsエクスプローラーに表示されるものとは異なります。
プログラムでの使用には1024が適切です。
違いがあるのは、driveinfoが「利用可能なスペース」として報告する内容と、利用可能なスペースと見なされるウィンドウの違いが原因である可能性があります。
ドライブメーカーのみが1,000を使用することに注意してください。 Windowsおよびほとんどのプログラム内では、正しいスケーリングは1024です。
また、コンパイラーはこれをとにかく最適化する必要がありますが、この計算は、大きさごとにビットを10シフトするだけで実行できます。
KB = B >> 10
MB = KB >> 10 = B >> 20
GB = MB >> 10 = KB >> 20 = B >> 30
読みやすくするために、1024での連続的な除算はより明確になると思います。
XKCDには 明確な答え があります。
/// <summary>
/// Function to convert the given bytes to either Kilobyte, Megabyte, or Gigabyte
/// </summary>
/// <param name="bytes">Double -> Total bytes to be converted</param>
/// <param name="type">String -> Type of conversion to perform</param>
/// <returns>Int32 -> Converted bytes</returns>
/// <remarks></remarks>
public static double ConvertSize(double bytes, string type)
{
try
{
const int CONVERSION_VALUE = 1024;
//determine what conversion they want
switch (type)
{
case "BY":
//convert to bytes (default)
return bytes;
break;
case "KB":
//convert to kilobytes
return (bytes / CONVERSION_VALUE);
break;
case "MB":
//convert to megabytes
return (bytes / CalculateSquare(CONVERSION_VALUE));
break;
case "GB":
//convert to gigabytes
return (bytes / CalculateCube(CONVERSION_VALUE));
break;
default:
//default
return bytes;
break;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return 0;
}
}
/// <summary>
/// Function to calculate the square of the provided number
/// </summary>
/// <param name="number">Int32 -> Number to be squared</param>
/// <returns>Double -> THe provided number squared</returns>
/// <remarks></remarks>
public static double CalculateSquare(Int32 number)
{
return Math.Pow(number, 2);
}
/// <summary>
/// Function to calculate the cube of the provided number
/// </summary>
/// <param name="number">Int32 -> Number to be cubed</param>
/// <returns>Double -> THe provided number cubed</returns>
/// <remarks></remarks>
public static double CalculateCube(Int32 number)
{
return Math.Pow(number, 3);
}
//Sample Useage
String Size = "File is " + ConvertSize(250222,"MB") + " Megabytes in size"
1024は実際には間違っています。 International Engineering Community(IEC)は2000年に標準を開発しましたが、コンピューター業界では悲しくも無視されています。この基準は基本的には
IEC SIゾーン で読むことができます。
したがって、変換が国際標準化に従って正しく正しく行われるようにするには、この科学表記法を使用する必要があります。
実際のファイルサイズが必要か、ディスク上のサイズが必要かによって異なります。実際のファイルサイズは、ファイルがメモリ内で使用する実際のバイト数です。ディスク上のサイズは、ファイルサイズとディスク/ファイルシステムのブロックサイズの関数です。
1000と1024のどちらを使用するかについての答えは、プレフィックスの大文字と小文字の区別にあるという、かすかな記憶があります。例:「科学的」1000スケーリングが使用される場合、「科学的」単位はkBになります(kg、kNなどと同様)。コンピューター中心の1024スケーリングが使用されている場合、単位はKBになります。したがって、科学接頭辞を大文字にすると、コンピュータ中心になります。
1024で除算します。