我在我的 C# 项目中使用 DriveInfo 类来检索给定驱动器上的可用字节。如何正确将此数字转换为兆字节或千兆字节?我猜除以 1024 不会完成这项工作。结果总是与 Windows-Explorer 中显示的结果不同。
7 回答
1024 在程序中使用是正确的。
您可能存在差异的原因可能是由于 driveinfo 报告为“可用空间”和 Windows 认为可用空间的差异。
请注意,只有驱动器制造商使用 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实际上是错误的。国际工程界 (IEC) 在 2000 年制定了一个标准,遗憾的是被计算机行业忽略了。这个标准基本上说
- 1000 字节是 1 千字节,1000KB 是 1 MB,依此类推。缩写有KB、MB、GB等。
- 广泛使用的 1024 字节 = 1 KB 应改为称为 1024 字节 = 1 千字节 (KiB)、1024 字节 = 1 兆字节 (MiB)、1024 字节 = 1 吉字节 (GiB) 等等。
大家可以在IEC SI zone上阅读。
因此,为了使您的转换根据国际标准化正确无误,您应该使用这种科学记数法。
这取决于您是想要实际文件大小还是磁盘大小。实际文件大小是文件在内存中使用的实际字节数。磁盘大小是文件大小和磁盘/文件系统的块大小的函数。
我隐约记得是使用 1000 还是 1024 的答案在于前缀的大小写。示例:如果使用“科学”1000 标度,则“科学”单位将为 kB(如 kg、kN 等)。如果使用以计算机为中心的 1024 缩放,则单位为 KB。因此,将科学前缀大写使其以计算机为中心。
除以 1024。