用DriveType如何具体区分软盘和可移动磁盘?          DriveInfo[] drivers = DriveInfo.GetDrives();
            foreach (DriveInfo driver in drivers)
            {
                if (driver.DriveType == DriveType.Removable)
                {
                    //结果把软盘(A)也显示成"可移动磁盘"了?这不是我愿意看到的!
                    //我想具体区分软盘和可移动磁盘,只显示可移动磁盘是否有办法?
                }
            }

解决方案 »

  1.   

    如果没有记错,A:B:盘符是专门给软盘驱动器用的。
    那么区分软盘就简单了:bool isFloppy = dirver.Name.Length > 0 && (driver.Name[0] == 'A' || driver.Name[0] == 'B');
      

  2.   

    传统上A、B是保留给软驱的,但是Windows Vista、2003以上版本已经没有这个限制了,可以任意分配驱动器符号...事实上XP虽然没有直接提供但是通过命令行操作或修改注册表仍然可以将A、B两个符号任意分配...软驱早已经被淘汰,除了一些该进博物馆的老机器几乎已经看不到软驱了,楼主为什么要区分呢?实在不行,你可以分别读写一些磁盘就知道了,以软驱的读写速率不可能被误认为U盘...
      

  3.   

    SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
     ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
     int i=0;
     foreach (ManagementObject disk in searcher.Get()) {
      string DriveType;
       DriveType = disk["DriveType"].ToString();
       switch (DriveType)
       {
        case "0":
         listView1.Items[i].SubItems.Add("未知设备");
         break;
        case "1":
         listView1.Items[i].SubItems.Add("未分区");
         break;
        case "2":
         listView1.Items[i].SubItems.Add("可移动磁盘");
         break;
        case "3":
         listView1.Items[i].SubItems.Add("硬盘");
         break;
        case "4":
         listView1.Items[i].SubItems.Add("网络驱动器");
         break;
        case "5":
         listView1.Items[i].SubItems.Add("光驱");
         break;
        case "6":
         listView1.Items[i].SubItems.Add("内存磁盘");
         break;
      } 
      

  4.   

    用DeviceIoControl 参数 IOCTL_STORAGE_GET_MEDIA_TYPES去获取一个DISK_GEOMETRY.DISK_GEOMETRY.MediaType 中你能够得到详细的信息
    typedef enum _MEDIA_TYPE {
      Unknown,
      F5_1Pt2_512,
      F3_1Pt44_512,
      F3_2Pt88_512,
      F3_20Pt8_512,
      F3_720_512,
      F5_360_512,
      F5_320_512,
      F5_320_1024,
      F5_180_512,
      F5_160_512,
      RemovableMedia,
      FixedMedia,
      F3_120M_512,
      F3_640_512,
      F5_640_512,
      F5_720_512,
      F3_1Pt2_512,
      F3_1Pt23_1024,
      F5_1Pt23_1024,
      F3_128Mb_512,
      F3_230Mb_512,
      F8_256_128,
      F3_200Mb_512,
      F3_240M_512,
      F3_32M_512 
    } MEDIA_TYPE;Unknown 
    Format is unknownF5_1Pt2_512 
    A 5.25" floppy, with 1.2MB and 512 bytes/sector.F3_1Pt44_512 
    A 3.5" floppy, with 1.44MB and 512 bytes/sector.F3_2Pt88_512 
    A 3.5" floppy, with 2.88MB and 512 bytes/sector.F3_20Pt8_512 
    A 3.5" floppy, with 20.8MB and 512 bytes/sector.F3_720_512 
    A 3.5" floppy, with 720KB and 512 bytes/sector.F5_360_512 
    A 5.25" floppy, with 360KB and 512 bytes/sector.F5_320_512 
    A 5.25" floppy, with 320KB and 512 bytes/sector.F5_320_1024 
    A 5.25" floppy, with 320KB and 1024 bytes/sector.F5_180_512 
    A 5.25" floppy, with 180KB and 512 bytes/sector.F5_160_512 
    A 5.25" floppy, with 160KB and 512 bytes/sector.RemovableMedia 
    Removable media other than floppy.FixedMedia 
    Fixed hard disk media.F3_120M_512 
    A 3.5" floppy, with 120MB and 512 bytes/sector.F3_640_512 
    A 3.5" floppy, with 640KB and 512 bytes/sector.F5_640_512 
    A 5.25" floppy, with 640KB and 512 bytes/sector.F5_720_512 
    A 5.25" floppy, with 720KB and 512 bytes/sector.F3_1Pt2_512 
    A 3.5" floppy, with 1.2MB and 512 bytes/sector.F3_1Pt23_1024 
    A 3.5" floppy, with 1.23MB and 1024 bytes/sector.F5_1Pt23_1024 
    A 5.25" floppy, with 1.23MB and 1024 bytes/sector.F3_128Mb_512 
    A 3.5" floppy, with 128MB and 512 bytes/sector.F3_230Mb_512 
    A 3.5" floppy, with 230MB and 512 bytes/sector.F8_256_128 
    An 8" floppy, with 256KB and 128 bytes/sector.F3_200Mb_512 
    A 3.5" floppy, with 200MB and 512 bytes/sector. (HiFD).F3_240M_512 
    A 3.5" floppy, with 240MB and 512 bytes/sector. (HiFD).F3_32M_512 
    A 3.5" floppy, with 32MB and 512 bytes/sector.http://msdn.microsoft.com/en-us/library/aa365231(VS.85).aspx
      

  5.   

    而且上面的方法只适合于Windows 2000 Professional 或者 Windows 2000 Server9x的系统应该用VWIN32_DIOC_DOS_IOCTL