下面程序是想打印出每个盘符下第一级目录中的所有文件和子目录的名称 
static void Main(string[] args)
        {
           
            string[] s1,s2;
                     s1= Directory.GetLogicalDrives();
            
            foreach (string t1 in s1)
            {
                Console.WriteLine("盘符={0} ",t1);               // s2=Directory.GetFileSystemEntries(t1);
               //foreach(string t2 in s2) Console.WriteLine(t2);
          
                  }
                }
程序输出:
   盘符=A:\
   盘符=C:\
   盘符=D:\
   盘符=E:\
   盘符=F:\
   盘符=G:\
   盘符=H:\
   盘符=I:\
如果取消注释:
               // s2=Directory.GetFileSystemEntries(t1);
               //foreach(string t2 in s2) Console.WriteLine(t2);
程序则抛出异常,因为A:是软驱,G:、H:、I:是虚拟光驱,对它们调用GetFileSystemEntries()函数报错。现在我想在执行s2=Directory.GetFileSystemEntries(t1);语句之前,判断哪些是当前可用盘符,应该怎么做?

解决方案 »

  1.   

    用try...catch的话,一旦异常了,就会结束当前的过程转到异常去了啊.那剩下的盘符处理怎么做?
    最好是不要用异常,还有有其他方法吗?
      

  2.   

    ManagementObjectSearcher disksearcher =new ManagementObjectSearcher("select * from win32_logicaldisk")
    Foreach(ManagementObject Disk in disksearcher.Get())
    {
        Console.WriteLine("Disk = " & Disk("Statusinfo"));
    }
    至于win32_logicaldisk的其它信息可以在http://msdn2.microsoft.com/en-us/library/aa394173.aspx中找到
      

  3.   

    查了一下 win32_logicaldisk属性,Access和Availability两个能指示盘符是否可用,但我不知道怎么把它们的值给取出来,下面的显示属性值的方法有问题:foreach(ManagementObject Disk in disksearcher.Get())
        {
           Console.WriteLine(Disk.Properties["Access"].Value.ToString());
           Console.WriteLine(Disk.Properties["Availability"].Value.ToString());   }如果是 Console.WriteLine(Disk.Properties["Name"].Value.ToString());就可以显示,不知道这是为什么?