读取C#中的USB设备序列号

有没有办法使用visual studio 2005在USB文本文件中读取USB设备序列号和数据?

试试这个:

USBSerialNumber usb = new USBSerialNumber(); string serial = usb.getSerialNumberFromDriveLetter("f:\"); MessageBox.Show(serial); 

这是USBSerialNumber类的内部结构:

 using System; using System.Collections.Generic; using System.Text; using System.Management; namespace USBDriveSerialNumber { public class USBSerialNumber { string _serialNumber; string _driveLetter; public string getSerialNumberFromDriveLetter(string driveLetter) { this._driveLetter = driveLetter.ToUpper(); if(!this._driveLetter.Contains(":")) { this._driveLetter += ":"; } matchDriveLetterWithSerial(); return this._serialNumber; } private void matchDriveLetterWithSerial() { string[] diskArray; string driveNumber; string driveLetter; ManagementObjectSearcher searcher1 = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition"); foreach (ManagementObject dm in searcher1.Get()) { diskArray = null; driveLetter = getValueInQuotes(dm["Dependent"].ToString()); diskArray = getValueInQuotes(dm["Antecedent"].ToString()).Split(','); driveNumber = diskArray[0].Remove(0, 6).Trim(); if(driveLetter==this._driveLetter){ /* This is where we get the drive serial */ ManagementObjectSearcher disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); foreach (ManagementObject disk in disks.Get()) { if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) & disk["InterfaceType"].ToString() == "USB") { this._serialNumber = parseSerialFromDeviceID(disk["PNPDeviceID"].ToString()); } } } } } private string parseSerialFromDeviceID(string deviceId) { string[] splitDeviceId = deviceId.Split('\\'); string[] serialArray; string serial; int arrayLen = splitDeviceId.Length-1; serialArray = splitDeviceId[arrayLen].Split('&'); serial = serialArray[0]; return serial; } private string getValueInQuotes(string inValue) { string parsedValue = ""; int posFoundStart = 0; int posFoundEnd = 0; posFoundStart = inValue.IndexOf("\""); posFoundEnd = inValue.IndexOf("\"", posFoundStart + 1); parsedValue = inValue.Substring(posFoundStart + 1, (posFoundEnd - posFoundStart) - 1); return parsedValue; } } } 

资料来源: http : //www.cfdan.com/posts/Retrieving_Non-Volatile_USB_Serial_Number_Using_C_Sharp.cfm

或者,您可以使用更少的代码来完成,这里是示例:

  string driveletter = "D:"; var index = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition").Get().Cast(); var disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive").Get().Cast(); string serial = ""; try { var drive = (from i in index where i["Dependent"].ToString().Contains(driveletter) select i).FirstOrDefault(); var key = drive["Antecedent"].ToString().Split('#')[1].Split(',')[0]; var disk = (from d in disks where d["Name"].ToString() == "\\\\.\\PHYSICALDRIVE" + key && d["InterfaceType"].ToString() == "USB" select d).FirstOrDefault(); serial = disk["PNPDeviceID"].ToString().Split('\\').Last(); } catch { //drive not found!! } Response.WriteLine(serial); 

Matt的答案几乎是正确的,但你必须在函数中传递没有反斜杠的驱动器号:string serial = usb.getSerialNumberFromDriveLetter(“ f: ”);