【问题标题】:Getting logical drives获取逻辑驱动器
【发布时间】:2009-11-20 16:41:31
【问题描述】:

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

string[] strDrives = Environment.GetLogicalDrives();

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

Drive Not Ready

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

【问题讨论】:

    标签: c# .net drives


    【解决方案1】:

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

    foreach (var oneDrive in strDrives)
    {
        var drive = new DriveInfo(oneDrive)
        if (drive.IsReady) 
        {
           // Do something with the drive...
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      IEnumerable<DriveInfo> readyDrives = Environment.GetLogicalDrives()
          .Select(s => new DriveInfo(s))
          .Where(di => di.IsReady);
      

      【讨论】:

        【解决方案3】:

        我会做以下事情:

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

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

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2010-10-21
          • 1970-01-01
          • 1970-01-01
          • 2011-09-14
          • 2017-02-13
          • 2021-04-21
          • 1970-01-01
          • 2021-11-25
          • 1970-01-01
          相关资源
          最近更新 更多