Windows 7平台,C#
我使用以下语句列出所有驱动器:
DriveInfo[] drives = DriveInfo.GetDrives();
Run Code Online (Sandbox Code Playgroud)
然后我可以使用DriveType找出所有可移动磁盘:
foreach (var drive in drives)
{
if(drive.DriveType == DriveType.Removable)
yield return drive;
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,SD卡磁盘和USB闪存盘共享相同的driveType:可移动,那么我怎么才能找到USB闪存盘?
谢谢!
您可以利用的ManagementObjectSearcher用它来查询是USB磁盘驱动器,然后获得相应的单元信,只有返回DriveInfo,其中RootDirectory.Name包含在结果集.
使用LINQ查询表达式:
static IEnumerable<DriveInfo> GetUsbDevices()
{
IEnumerable<string> usbDrivesLetters = from drive in new ManagementObjectSearcher("select * from Win32_DiskDrive WHERE InterfaceType='USB'").Get().Cast<ManagementObject>()
from o in drive.GetRelated("Win32_DiskPartition").Cast<ManagementObject>()
from i in o.GetRelated("Win32_LogicalDisk").Cast<ManagementObject>()
select string.Format("{0}\\", i["Name"]);
return from drive in DriveInfo.GetDrives()
where drive.DriveType == DriveType.Removable && usbDrivesLetters.Contains(drive.RootDirectory.Name)
select drive;
}
Run Code Online (Sandbox Code Playgroud)
使用LINQ扩展方法:
static IEnumerable<DriveInfo> GetUsbDevices()
{
IEnumerable<string> usbDrivesLetters = new ManagementObjectSearcher("select * from Win32_DiskDrive WHERE InterfaceType='USB'").Get().Cast<ManagementObject>()
.SelectMany(drive => drive.GetRelated("Win32_DiskPartition").Cast<ManagementObject>())
.SelectMany(o => o.GetRelated("Win32_LogicalDisk").Cast<ManagementObject>())
.Select(i => Convert.ToString(i["Name"]) + "\\");
return DriveInfo.GetDrives().Where(drive => drive.DriveType == DriveType.Removable && usbDrivesLetters.Contains(drive.RootDirectory.Name));
}
Run Code Online (Sandbox Code Playgroud)
使用foreach:
static IEnumerable<string> GetUsbDrivesLetters()
{
foreach (ManagementObject drive in new ManagementObjectSearcher("select * from Win32_DiskDrive WHERE InterfaceType='USB'").Get())
foreach (ManagementObject o in drive.GetRelated("Win32_DiskPartition"))
foreach (ManagementObject i in o.GetRelated("Win32_LogicalDisk"))
yield return string.Format("{0}\\", i["Name"]);
}
static IEnumerable<DriveInfo> GetUsbDevices()
{
IEnumerable<string> usbDrivesLetters = GetUsbDrivesLetters();
foreach (DriveInfo drive in DriveInfo.GetDrives())
if (drive.DriveType == DriveType.Removable && usbDrivesLetters.Contains(drive.RootDirectory.Name))
yield return drive;
}
Run Code Online (Sandbox Code Playgroud)
要使用ManagementObject你需要添加引用System.Management
我没有测试好,因为现在我没有任何SD卡,但我希望它有所帮助
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |