gpt4 book ai didi

c# - 如何通过序列号获取CD/DVD-ROM盘符

转载 作者:太空宇宙 更新时间:2023-11-03 20:52:39 26 4
gpt4 key购买 nike

我正在尝试使用 Primera 光盘复制器提供的 PTRobot API 进行交互。他们的 API 返回有关机器人中记录器驱动器的信息,但缺少的关键部分是驱动器号。

他们返回的信息是型号名称、固件和序列号。

我需要区分一个单元中的多个相同驱动器,序列号是提供的唯一唯一值。

我发现了很多相反的例子(使用驱动器号来获取型号或序列号),但它们看起来都无法翻转以供我使用。

最佳答案

听起来您可以获取序列号与您正在搜索的驱动器匹配的驱动器,然后获取它的分区,并为每个分区从逻辑驱动器获取它的驱动器号。

例如:

using System.Collections.Generic
using System.Management;

public static List<string> GetDriveLettersForSerialNumber(string driveSerialNumber)
{
var results = new List<string>();
if (driveSerialNumber == null) return results;

var drive = new ManagementObjectSearcher(
"SELECT DeviceID, SerialNumber, Partitions FROM Win32_DiskDrive").Get()
.Cast<ManagementObject>()
.FirstOrDefault(device =>
device["SerialNumber"].ToString().Trim()
.Equals(driveSerialNumber.Trim(), StringComparison.OrdinalIgnoreCase));

if (drive == null) return results;

var partitions = new ManagementObjectSearcher(
$"ASSOCIATORS OF {{Win32_DiskDrive.DeviceID='{drive["DeviceID"]}'}} " +
"WHERE AssocClass = Win32_DiskDriveToDiskPartition").Get();

foreach (var partition in partitions)
{
var logicalDrives = new ManagementObjectSearcher(
"ASSOCIATORS OF {{Win32_DiskPartition.DeviceID=" +
$"'{partition["DeviceID"]}'}} " +
"WHERE AssocClass = Win32_LogicalDiskToPartition").Get();

foreach (var logicalDrive in logicalDrives)
{
var volumes = new ManagementObjectSearcher(
"SELECT Name FROM Win32_LogicalDisk WHERE " +
$"Name='{logicalDrive["Name"]}'").Get().Cast<ManagementObject>();

results.AddRange(volumes.Select(v => v["Name"].ToString()));
}
}

return results;
}

对于 CDROM 来说似乎更容易——“Id”和“SerialNumber”都包含在同一个对象中:

public static string GetDriveLetterForCDROMSerialNumber(string driveSerialNumber)
{
return new ManagementObjectSearcher(
"SELECT Id, SerialNumber FROM Win32_CDROMDrive").Get()
.Cast<ManagementObject>()
.Where(drive => drive.GetPropertyValue("SerialNumber").ToString().Trim()
.Equals(driveSerialNumber.Trim(), StringComparison.OrdinalIgnoreCase))
.Select(drive => drive.GetPropertyValue("Id").ToString())
.FirstOrDefault() ?? "Unknown";
}

关于c# - 如何通过序列号获取CD/DVD-ROM盘符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53677688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com