Files
douyin/utils/ByteToGbConverter.cs
T
2025-10-22 16:13:40 +08:00

60 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace dy.net.utils
{
public class ByteToGbConverter
{
/// <summary>
/// 将字节数转换为GB(采用二进制换算:1GB = 1024^3 Byte
/// </summary>
/// <param name="bytes">字节数(需使用long类型避免大数值溢出)</param>
/// <param name="decimalPlaces">保留的小数位数</param>
/// <returns>转换后的GB值</returns>
public static string ConvertBytesToGb(long bytes, int decimalPlaces = 2)
{
// 1GB = 1024 * 1024 * 1024 = 1073741824 Byte
double gb = (double)bytes / 1073741824;
// 四舍五入保留指定小数位数
return Math.Round(gb, decimalPlaces).ToString("F2");
}
/// <summary>
/// 获取宿主机所有本地固定磁盘的总空间(GB)
/// </summary>
/// <returns>总空间字符串(如 "1408.35 GB"),失败时返回错误信息</returns>
public static string GetHostTotalDiskSpaceGB()
{
try
{
// 1. 获取所有驱动器
DriveInfo[] allDrives = DriveInfo.GetDrives();
// 2. 筛选:仅保留“就绪的本地固定磁盘”(DriveType.Fixed
var fixedDrives = allDrives.Where(drive =>
drive.IsReady &&
drive.DriveType == DriveType.Fixed
).ToList();
if (!fixedDrives.Any())
{
return "未找到可用的本地固定磁盘";
}
// 3. 累加所有固定磁盘的总空间(字节)
long totalBytes = fixedDrives.Sum(drive => drive.TotalSize);
// 4. 转换为GB并保留2位小数
return ConvertBytesToGb(totalBytes);
}
catch (UnauthorizedAccessException)
{
return "权限不足,无法访问部分磁盘";
}
catch (Exception ex)
{
return $"获取宿主机总磁盘空间失败:{ex.Message}";
}
}
}
}