是否可以获得所有驱动器?例如,由于缺少身份验证,网络驱动器未连接。
我在我的探险家中看到,例如带红叉的字母 Z 。 此连接未经身份验证即存储,但此代码不会给我这封信。
System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
并且:我如何注册一个用于连接USB驱动器的监听器?
答案 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异常。