在.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
相关产品推荐
相关产品推荐

