用DriveType如何具体区分软盘和可移动磁盘?

lsd123 2009-07-06 12:52:53
用DriveType如何具体区分软盘和可移动磁盘?

          DriveInfo[] drivers = DriveInfo.GetDrives();
foreach (DriveInfo driver in drivers)
{
if (driver.DriveType == DriveType.Removable)
{
//结果把软盘(A)也显示成"可移动磁盘"了?这不是我愿意看到的!
//我想具体区分软盘和可移动磁盘,只显示可移动磁盘是否有办法?
}
}
...全文
339 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Optione 2009-07-07
  • 打赏
  • 举报
回复
唉!
jscn123789abc 2009-07-06
  • 打赏
  • 举报
回复
ding...
lsd123 2009-07-06
  • 打赏
  • 举报
回复
来人啊
lsd123 2009-07-06
  • 打赏
  • 举报
回复

除了写死判断,A\或B,
还有没有其他方法?
lsd123 2009-07-06
  • 打赏
  • 举报
回复
除了写死判断,A\或B,
还有没有其他方法?
Optione 2009-07-06
  • 打赏
  • 举报
回复
而且上面的方法只适合于Windows 2000 Professional 或者 Windows 2000 Server

9x的系统应该用VWIN32_DIOC_DOS_IOCTL
Optione 2009-07-06
  • 打赏
  • 举报
回复
用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 unknown

F5_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
lsd123 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vrhero 的回复:]

传统上A、B是保留给软驱的,但是Windows Vista、2003以上版本已经没有这个限制了,可以任意分配驱动器符号...事实上XP虽然没有直接提供但是通过命令行操作或修改注册表仍然可以将A、B两个符号任意分配...

软驱早已经被淘汰,除了一些该进博物馆的老机器几乎已经看不到软驱了,楼主为什么要区分呢?

实在不行,你可以分别读写一些磁盘就知道了,以软驱的读写速率不可能被误认为U盘...
[/Quote]

谢谢关注,
因为我没办法预知用户的机器配置,可能就有用户在用比较老的机器,
所以在我的软件里就考虑到这一点,


wuyq11 2009-07-06
  • 打赏
  • 举报
回复
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;
  }

liyoubaidu 2009-07-06
  • 打赏
  • 举报
回复
如果你电脑上没有软盘驱动器的话,就直接排除掉A盘可以了.
如果你电脑上软盘驱动器的话,我也不知道了.这年头每人用软驱了吧.
kcseason 2009-07-06
  • 打赏
  • 举报
回复
学习
vrhero 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gomoku 的回复:]
如果没有记错,A:B:盘符是专门给软盘驱动器用的。
那么区分软盘就简单了:

C# codebool isFloppy= dirver.Name.Length>0&& (driver.Name[0]=='A'|| driver.Name[0]=='B');
[/Quote]
传统上A、B是保留给软驱的,但是Windows Vista、2003以上版本已经没有这个限制了,可以任意分配驱动器符号...事实上XP虽然没有直接提供但是通过命令行操作或修改注册表仍然可以将A、B两个符号任意分配...

软驱早已经被淘汰,除了一些该进博物馆的老机器几乎已经看不到软驱了,楼主为什么要区分呢?

实在不行,你可以分别读写一些磁盘就知道了,以软驱的读写速率不可能被误认为U盘...
sealzhang 2009-07-06
  • 打赏
  • 举报
回复
把A盘排除掉就可以咯,系统把A盘自动分配掉了
gomoku 2009-07-06
  • 打赏
  • 举报
回复
如果没有记错,A:B:盘符是专门给软盘驱动器用的。
那么区分软盘就简单了:

bool isFloppy = dirver.Name.Length > 0 && (driver.Name[0] == 'A' || driver.Name[0] == 'B');

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧