C# 通过驱动器的序列号获取驱动器的名称
C# Get a drive's Name via it's Serial ID
我正在使用 C# 并致力于 Visual Studio 2015。
我需要从它的序列号中获取连接的 USB 驱动器的名称。
我尝试使用 WMI Class 查询:"SELECT * FROM Win32_LogicalDisk"
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
foreach (ManagementObject item in searcher.Get())
{
if (item != null && item["VolumeSerialNumber"] != null && item["VolumeName"] != null)
{
if (item["VolumeSerialNumber"].ToString() == "50D76BF4")
{
Console.WriteLine($"{item["VolumeName"]} Is Connected and It's Letter is {item["Name"]}");
}
}
}
但是,VolumeSerialNumber并不是真正的Serial ID。格式化磁盘时更改。
好的,我明白了。
我写了一个方法,从它的 真实且不可更改的 id.
中重新生成硬盘驱动器的名称和字母
你需要参考System.Management
这是代码:
public static string GetDriveLetterAndLabelFromID(string id)
{
ManagementClass devs = new ManagementClass(@"Win32_Diskdrive");
{
ManagementObjectCollection moc = devs.GetInstances();
foreach (ManagementObject mo in moc)
{
string a = (string)mo["SerialNumber"];
if (a== id)
{
foreach (ManagementObject b in
mo.GetRelated("Win32_DiskPartition"))
{
foreach (ManagementBaseObject c in b.GetRelated("Win32_LogicalDisk"))
{
string result = $"HardDrive Name: {c["VolumeName"].ToString()}\nHardDrive Letter: {c["DeviceID"]}";
return result;
}
}
}
}
}
return null;
}
我正在使用 C# 并致力于 Visual Studio 2015。 我需要从它的序列号中获取连接的 USB 驱动器的名称。 我尝试使用 WMI Class 查询:"SELECT * FROM Win32_LogicalDisk"
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
foreach (ManagementObject item in searcher.Get())
{
if (item != null && item["VolumeSerialNumber"] != null && item["VolumeName"] != null)
{
if (item["VolumeSerialNumber"].ToString() == "50D76BF4")
{
Console.WriteLine($"{item["VolumeName"]} Is Connected and It's Letter is {item["Name"]}");
}
}
}
但是,VolumeSerialNumber并不是真正的Serial ID。格式化磁盘时更改。
好的,我明白了。
我写了一个方法,从它的 真实且不可更改的 id.
中重新生成硬盘驱动器的名称和字母你需要参考System.Management
这是代码:
public static string GetDriveLetterAndLabelFromID(string id)
{
ManagementClass devs = new ManagementClass(@"Win32_Diskdrive");
{
ManagementObjectCollection moc = devs.GetInstances();
foreach (ManagementObject mo in moc)
{
string a = (string)mo["SerialNumber"];
if (a== id)
{
foreach (ManagementObject b in
mo.GetRelated("Win32_DiskPartition"))
{
foreach (ManagementBaseObject c in b.GetRelated("Win32_LogicalDisk"))
{
string result = $"HardDrive Name: {c["VolumeName"].ToString()}\nHardDrive Letter: {c["DeviceID"]}";
return result;
}
}
}
}
}
return null;
}