driveinfo.getdrives() 返回系统识别的所有逻辑驱动器数组,包含盘符但不保证可访问;需检查 isready 并过滤 drivetype 才能获取可用本地驱动器。
用 DriveInfo.GetDrives() 获取所有逻辑驱动器
这是最直接的方式,DriveInfo.GetDrives() 返回当前系统中所有逻辑驱动器的 DriveInfo 数组,包括已挂载的物理磁盘分区、U 盘、光驱、网络驱动器(若已映射)等。
注意:它不区分“是否可访问”,只反映系统识别出的逻辑盘符。部分驱动器可能因权限、未格式化或脱机而无法读取属性。
- 返回结果包含所有盘符,如
"C:\"、"D:\"、"Z:\"等,即使该驱动器当前无介质(如空光驱)也会列出 - 需引用
System.IO命名空间 - 对每个
DriveInfo实例,建议先检查IsReady属性再访问TotalSize或AvailableFreeSpace,否则会抛出IOException
只获取可用且可读的本地驱动器
如果只想列出用户能实际操作的盘符(比如资源管理器里显示为“本地磁盘”的那些),需要额外过滤:
- 排除
DriveType.NoRootDirectory(如某些虚拟设备)和DriveType.Unknown - 排除
DriveType.CDRom(光驱)或DriveType.Network(除非你明确需要) - 必须检查
drive.IsReady == true,否则访问DriveFormat或空间信息会失败
示例片段:
var drives = DriveInfo.GetDrives()
.Where(d => d.DriveType == DriveType.Fixed || d.DriveType == DriveType.Removable)
.Where(d => d.IsReady)
.Select(d => d.Name)
.ToArray();
为什么 GetDrives() 有时返回空或报错
常见原因不是代码问题,而是执行环境或权限限制: