Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DriveInfo.GetDrives显示未连接的网络驱动器_C# - Fatal编程技术网

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

C# DriveInfo.GetDrives显示未连接的网络驱动器,c#,C#,是否可以获取所有驱动器?例如,由于缺乏身份验证,网络驱动器未连接 我在我的浏览器中看到,例如,带有红十字的字母Z。 此连接未经身份验证即被存储,但此代码未给出此字母 System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives(); 以及:如何注册用于连接USB驱动器的侦听器?参考Microsoft的示例和信息,我找到了以下代码来生成所有驱动器的驱动器号和类型,包括当前未连接但已分配的驱动器 using System; using S

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

我在我的浏览器中看到,例如,带有红十字的字母Z。 此连接未经身份验证即被存储,但此代码未给出此字母

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();
    }
}