C# DriveInfo.GetDrives显示未连接的网络驱动器
是否可以获取所有驱动器?例如,由于缺乏身份验证,网络驱动器未连接 我在我的浏览器中看到,例如,带有红十字的字母Z。 此连接未经身份验证即被存储,但此代码未给出此字母C# DriveInfo.GetDrives显示未连接的网络驱动器,c#,C#,是否可以获取所有驱动器?例如,由于缺乏身份验证,网络驱动器未连接 我在我的浏览器中看到,例如,带有红十字的字母Z。 此连接未经身份验证即被存储,但此代码未给出此字母 System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives(); 以及:如何注册用于连接USB驱动器的侦听器?参考Microsoft的示例和信息,我找到了以下代码来生成所有驱动器的驱动器号和类型,包括当前未连接但已分配的驱动器 using System; using S
System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
以及:如何注册用于连接USB驱动器的侦听器?参考Microsoft的示例和信息,我找到了以下代码来生成所有驱动器的驱动器号和类型,包括当前未连接但已分配的驱动器
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:
上面示例中的关键是
if(d.IsReady==true)
,因为它只会获取被认为已准备就绪的驱动器的属性,并且不会引发IO异常。请在每篇文章中问一个问题。我已经从帖子中删除了第二个问题“如何收听USB连接事件”(以及“谢谢”注释),也许这会对你有所帮助?你是说,使用WMI?我认为,这是可行的。但是wmi调用非常慢:(另一种解决方案会很好。此代码不起作用。在我的示例中:我有一个字母(z),它被映射到网络路径。但是网络路径上没有身份验证。在资源管理器中,您可以看到映射的驱动器字母,字母z:带有一个红十字。函数DriveInfo.GetDrives()
请不要输入此字母,以便我可以检查就绪状态。请在尝试显示驱动器字母Z时发布您正在使用的代码。如果没有代码,将很难跟踪您的问题,因为上述代码在我的测试用例中运行良好,并且在每个dr的驱动器阵列中都有一个driveinfo
对象我在资源管理器中显示了--包括那些当前已断开连接的。上述问题的另一个潜在问题是用户上下文。例如,如果代码以管理员身份运行,并且映射的驱动器是由登录用户创建的,则OP中提到的问题可以在Windows 7中用上述代码复制。但是,这个问题em在Windows 2008中不存在。为了进一步调试,需要有关操作系统和用于执行代码的权限的详细信息。我看到您现在阅读了我的问题。我的操作系统是Win7,UAC被禁用,代码在映射网络驱动器的用户下运行。该用户在administrators组中。此代码无效。取消映射正如raiserle所说,ped驱动器不是从DriveInfo.GetDrives()中提供的。我也有同样的问题。
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();
}
}