有很多代码可以在Mega Byte中返回硬盘大小。 但我有一个简单的问题。
您购买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);
这是一种使用wmi
获取硬盘大小的简单方法,方法GetSize
会将大小转换为GB。但它根本不会返回工厂尺寸。
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 :(得分: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 :(得分:1)
出厂尺寸始终除以1000而不是1024。 有关计算的工作原理,请参阅https://www.sevenforums.com/hardware-devices/23890-hdds-advertized-size-vs-actual-size.html。
简短版本:将结果以GB为单位除以0.9313226以获得实际大小。