我使用以下代码来获取逻辑驱动器:
string[] strDrives = Environment.GetLogicalDrives();
但是当我想要遍历它时,会发生异常,并显示消息:
Drive Not Ready
我怎样才能准备好驱动器?
答案 0 :(得分:6)
使用DriveInfo确定驱动器是否准备就绪。
foreach (var oneDrive in strDrives)
{
var drive = new DriveInfo(oneDrive)
if (drive.IsReady)
{
// Do something with the drive...
}
}
答案 1 :(得分:1)
当然,这也可以使用Linq实现:
IEnumerable<DriveInfo> readyDrives = Environment.GetLogicalDrives()
.Select(s => new DriveInfo(s))
.Where(di => di.IsReady);
答案 2 :(得分:0)
我会做以下事情:
string[] drives = DriveInfo.GetDrives()
.Where(drive => drive.IsReady)
.Select(drive => drive.Name)
.ToArray();
DriveInfo
提供静态GetDrives
方法,该方法返回DriveInfo
(DriveInfo[]
)个实例的数组,表示有关每个驱动器的信息。
每个实例的IsReady
属性返回一个布尔值,指示是否可以读取或写入驱动器。
没有准备好的驱动器&#39;在使用时抛出异常,这是正确的:你不能对未准备好的驱动器执行任何操作,所以最好的方法是在有人这样做的情况下抛出异常,通知他们他们的错误。
在上面的代码中,我使用LINQ的Where
扩展来遍历驱动器并丢弃那些尚未准备好的驱动器。
接下来,在相同性质的Select
方法中,我检索每个驱动器的Name
属性,该属性代表驱动器号,例如C:\
或{{1 }}
最后,我在返回的D:\
上调用ToArray
方法,该方法将枚举中的所有元素复制到数组中。我假设您希望将驱动器号作为数组。