You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.NET Standard类库中获取驱动器可用空间是否可行?如何实现?

在.NET Standard类库中检查驱动器可用空间:完全可行!

当然可以实现!.NET Standard的核心目标就是让不同.NET平台(比如你的.NET Core和.NET Framework项目)共享通用代码,而检查驱动器可用空间的需求刚好在它的API覆盖范围内,完全不需要担心兼容性问题。

实现步骤与代码示例

1. 确认类库版本

建议使用**.NET Standard 2.0**及以上版本,这个版本对.NET Framework 4.6.1+和.NET Core 2.0+的兼容性拉满,完美适配你的两个项目场景。

2. 使用System.IO.DriveInfo类实现核心逻辑

这个类是.NET Standard内置的,不需要额外安装NuGet包,直接就能用来获取驱动器的各类信息,包括可用空间。下面是一个封装好的工具类示例:

using System.IO;

namespace YourSharedLibraryNamespace
{
    public static class DriveSpaceUtility
    {
        /// <summary>
        /// 获取指定驱动器对当前用户可用的空闲空间(字节数)
        /// </summary>
        /// <param name="drivePath">驱动器路径,例如"C:\"、"D:"</param>
        /// <returns>可用空间字节数;驱动器未就绪/无效时返回-1</returns>
        public static long GetUserAvailableFreeSpace(string drivePath)
        {
            try
            {
                var driveInfo = new DriveInfo(drivePath);
                
                // 先判断驱动器是否就绪(比如避免读取未插入的U盘)
                if (!driveInfo.IsReady)
                {
                    return -1;
                }

                // AvailableFreeSpace是当前用户实际能使用的空间,比TotalFreeSpace更准确
                return driveInfo.AvailableFreeSpace;
            }
            catch (IOException ex)
            {
                // 捕获无效驱动器、权限不足等异常,可根据需求调整处理逻辑
                System.Diagnostics.Debug.WriteLine($"获取驱动器空间出错:{ex.Message}");
                return -1;
            }
        }

        /// <summary>
        /// 将字节数转换为更易读的格式(如GB、MB)
        /// </summary>
        public static string FormatSpaceSize(long bytes)
        {
            if (bytes < 0)
            {
                return "驱动器不可用";
            }

            var sizeSuffixes = new[] { "B", "KB", "MB", "GB", "TB" };
            int suffixIndex = 0;
            decimal size = bytes;

            while (size >= 1024 && suffixIndex < sizeSuffixes.Length - 1)
            {
                size /= 1024;
                suffixIndex++;
            }

            return $"{size:N2} {sizeSuffixes[suffixIndex]}";
        }
    }
}

3. 在你的项目中调用

不管是.NET Core还是.NET Framework项目,只要引用这个.NET Standard类库,直接调用方法就行:

// 示例:获取C盘可用空间并格式化显示
long freeSpaceBytes = DriveSpaceUtility.GetUserAvailableFreeSpace("C:\\");
string readableSpace = DriveSpaceUtility.FormatSpaceSize(freeSpaceBytes);
Console.WriteLine($"C盘可用空间:{readableSpace}");

注意事项

  • 权限问题:一般读取驱动器信息不需要特殊权限,但如果你的应用运行在受限环境(比如Windows服务、低权限用户),可能需要确保有足够的访问权限。
  • 驱动器状态:一定要先检查IsReady属性,避免处理未就绪的驱动器(比如弹出的光驱、未插入的移动硬盘)导致异常。

内容的提问来源于stack exchange,提问作者Tomas Kucera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:34:28