C#获取所有逻辑驱动器 C#如何列出电脑中所有的盘符

来源:这里教程网 时间:2026-02-21 17:41:30 作者:

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()
有时返回空或报错

常见原因不是代码问题,而是执行环境或权限限制:

在某些沙盒环境(如部分容器、受限的 Windows 应用沙箱)中,.NET 可能无法枚举全部驱动器 以低权限运行时,访问某些系统保留卷(如恢复分区
Recovery (D:)
)可能触发访问拒绝,导致
IsReady
false
或属性读取异常
调用发生在系统启动早期(如服务初始化阶段),部分驱动器尚未完成枚举,此时结果可能不全

遇到空数组,先用管理员权限运行测试程序,再确认是否真无驱动器,还是被过滤掉了。

对比
Environment.GetLogicalDrives()

这个方法更轻量,只返回字符串数组(如

{"C:\", "D:\", "E:\"}
),不提供任何驱动器状态信息。

速度快,无 I/O,适合仅需盘符列表的场景(如填充下拉框) 不检查是否存在或是否就绪,所以后续访问前仍需做
Directory.Exists()
try/catch
返回结果与
GetDrives()
Name
字段基本一致,但不保证顺序,也不含驱动器类型信息

如果你只需要盘符字符串,且不关心是否可用,用它更简单;否则优先选

DriveInfo.GetDrives()
并做好健壮性处理。

真正容易被忽略的是:

IsReady
不是布尔开关,而是访问状态快照——同一驱动器在两次调用间可能插入/弹出,所以生产代码里别缓存
IsReady == true
的结果去反复读取空间信息。

相关推荐