0

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

string[] strDrives = Environment.GetLogicalDrives();

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

Drive Not Ready

我怎样才能得到刚刚准备好的驱动器?

4

3 回答 3

6

使用 DriveInfo 确定驱动器是否准备就绪。

foreach (var oneDrive in strDrives)
{
    var drive = new DriveInfo(oneDrive)
    if (drive.IsReady) 
    {
       // Do something with the drive...
    }
}
于 2009-11-20T16:44:42.443 回答
1

当然,这也可以使用 Linq 来实现:

IEnumerable<DriveInfo> readyDrives = Environment.GetLogicalDrives()
    .Select(s => new DriveInfo(s))
    .Where(di => di.IsReady);
于 2009-11-20T16:50:38.183 回答
0

我会做以下事情:

string[] drives = DriveInfo.GetDrives()
                           .Where(drive => drive.IsReady)
                           .Select(drive => drive.Name)
                           .ToArray();

DriveInfo提供了一个静态方法,它返回一个( ) 实例GetDrives数组,表示每个驱动器的信息。DriveInfoDriveInfo[]

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

未“准备好”的驱动器在使用时会抛出异常,这是正确的:您不能对未准备好的驱动器执行任何操作,因此最好的方法是在有人这样做时抛出异常,并告知他们他们的错误。

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

接下来,在Select相同性质的方法中,我检索每个驱动器的Name属性,它表示驱动器号,例如C:\D:\

最后,我调用ToArray返回的方法IEnumerable,它将枚举中的所有元素复制到一个数组中。我假设您希望将驱动器号作为一个数组。

于 2017-01-28T17:51:04.490 回答