我想获取AppData文件夹所在的驱动器序列号。
我使用此代码:
SELECT SerialNumber FROM Win32_DiskDrive
。
但这会返回每个序列号(USB、所有驱动器等)。
如何只获取AppData文件夹所在的驱动器?
假设您正在谈论物理磁盘驱动器的序列号。一种实现方法如下,您可以参考:
PathGetDriveNumber
从路径获取驱动器号。例如,从 C:
路径获取 AppData
。Win32_DiskDriveToDiskPartition
和 Win32_LogicalDiskToPartition
检索与给定物理磁盘关联的逻辑磁盘。如上面的快照所示,您可以获得与
C:
关联的 PHYSICALDRIVE0
。
Win32_DiskDrive
获取物理磁盘的序列号。public static string Mtd_GetDriveLetterWithLabel(string DriveLabel)
{
ManagementObjectSearcher DriveLabelQuery = new ManagementObjectSearcher(" SELECT * FROM Win32_Volume WHERE Label = '" + DriveLabel + "' ");
string DriveLetter = "";
foreach (ManagementObject DriveLabels in DriveLabelQuery.Get())
{
DriveLetter = DriveLabels["DriveLetter"].ToString();
}
return DriveLetter;
}
public static int Mtd_GetDiskNumberWithLetter(string DriveLetter)
{
ManagementObjectSearcher DriveLetterGeneralQuery = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");
ManagementObjectCollection DriveLetterCollection = DriveLetterGeneralQuery.Get();
string Dependent = @"\\" + Environment.MachineName + "\\root\\cimv2:Win32_LogicalDisk.DeviceID=\"" + DriveLetter + "\"";
String DiskNumberTxt = "";
foreach (ManagementObject DiskNumbers in DriveLetterCollection)
{
if ((DiskNumbers["Dependent"].ToString()) == Dependent)
{
DiskNumberTxt = DiskNumbers["Antecedent"].ToString();
}
}
int From = DiskNumberTxt.IndexOf("Disk #") + "Disk #".Length;
int To = DiskNumberTxt.IndexOf(",");
String DiskNumberTrim = DiskNumberTxt.Substring(From, To - From);
int DiskNumber = Int32.Parse(DiskNumberTrim);
return DiskNumber;
}
public static string Mtd_GetSerialNumberWithDiskNumber(int DiskNumber)
{
ManagementObjectSearcher SerialNumberQuery = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
ManagementObjectCollection SerialNumberCollection = SerialNumberQuery.Get();
string Tag = @"\\.\PHYSICALDRIVE" + DiskNumber;
String SerialNumberTxt = "";
foreach (ManagementObject SerialNumbers in SerialNumberCollection)
{
if ((SerialNumbers["Tag"].ToString()) == Tag)
{
SerialNumberTxt = SerialNumbers["SerialNumber"].ToString();
}
}
return SerialNumberTxt;
}
string DriveLabel = "DATA";
string DriveLetter = Mtd_GetDriveLetterWithLabel(DriveLabel);
Console.WriteLine(DriveLetter);
int DiskNumber = Mtd_GetDiskNumberWithLetter(DriveLetter);
Console.WriteLine(DiskNumber);
string DiskSerialNumber = Mtd_GetSerialNumberWithDiskNumber(DiskNumber);
Console.WriteLine(DiskSerialNumber);