gpt4 book ai didi

c# - 硬盘驱动器的出厂大小 - C#

转载 作者:行者123 更新时间:2023-11-30 20:31:22 26 4
gpt4 key购买 nike

有很多代码以兆字节为单位返回硬盘驱动器大小。但我有一个简单的问题。

您购买了一个 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。

最佳答案

硬盘驱动器的大小以 10 为基数计算,因此 1000 兆字节为 1 GB。从技术上讲,我们作为技术人员使用了错误的术语,因为 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);

关于c# - 硬盘驱动器的出厂大小 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43310997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com