获得逻辑驱动器

时间:2009-11-20 16:41:31

标签: c# .net drives

我使用以下代码来获取逻辑驱动器:

string[] strDrives = Environment.GetLogicalDrives();

但是当我想要遍历它时,会发生异常,并显示消息:

Drive Not Ready

我怎样才能准备好驱动器?

3 个答案:

答案 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方法,该方法返回DriveInfoDriveInfo[])个实例的数组,表示有关每个驱动器的信息。

每个实例的IsReady属性返回一个布尔值,指示是否可以读取或写入驱动器。

没有准备好的驱动器&#39;在使用时抛出异常,这是正确的:你不能对未准备好的驱动器执行任何操作,所以最好的方法是在有人这样做的情况下抛出异常,通知他们他们的错误。

在上面的代码中,我使用LINQ的Where扩展来遍历驱动器并丢弃那些尚未准备好的驱动器。

接下来,在相同性质的Select方法中,我检索每个驱动器的Name属性,该属性代表驱动器号,例如C:\或{{1 }}

最后,我在返回的D:\上调用ToArray方法,该方法将枚举中的所有元素复制到数组中。我假设您希望将驱动器号作为数组。