DriveInfo.GetDrives显示未连接的网络驱动器

时间:2016-06-05 18:39:44

标签: c#

是否可以获得所有驱动器?例如,由于缺少身份验证,网络驱动器未连接。

我在我的探险家中看到,例如带红叉的字母 Z 。 此连接未经身份验证即存储,但此代码不会给我这封信。

System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();

并且:我如何注册一个用于连接USB驱动器的监听器?

1 个答案:

答案 0 :(得分:0)

参考Microsoft https://msdn.microsoft.com/en-us/library/system.io.driveinfo.getdrives(v=vs.110).aspx中的示例和信息,我找到了以下代码来生成所有驱动器的驱动器号和类型,包括那些当前未连接但已分配的驱动器。

using System;
using System.IO;

namespace DriveInfoExample
{
    class Program
    {
        static void Main(string[] args)
        {
            DriveInfo[] drives = DriveInfo.GetDrives();
            foreach (DriveInfo d in drives)
            {
                // The only two properties that can be accessed for all drives
                // whether they are online or not (ready)
                //
                Console.WriteLine(d.Name);
                Console.WriteLine(d.DriveType);
            }
            Console.ReadLine();
        }
    }
}

根据上面链接中的说明,如果您尝试获取驱动器上的其他属性尚未就绪,将抛出IOException

处理此问题的一种方法是在获取其他属性之前使用if语句检查drive.IsReady true (如下所示,几乎直接从上面的链接中删除):

using System;
using System.IO;

class DriveInfoExample
{
    public static void Main()
    {
        DriveInfo[] drives = DriveInfo.GetDrives();

        foreach (DriveInfo d in drives)
        {
            Console.WriteLine(d.Name);
            Console.WriteLine(d.DriveType);
            if (d.IsReady == true)
            {
                Console.WriteLine(d.VolumeLabel);
                Console.WriteLine(d.DriveFormat);
                Console.WriteLine(d.AvailableFreeSpace);
                Console.WriteLine(d.TotalFreeSpace);
                Console.WriteLine(d.TotalSize);
            }
        }
        Console.ReadLine();
    }
}

上面示例中的键是if (d.IsReady == true),因为它只会获取被认为已准备好的驱动器的属性,并且您不会抛出IO异常。