輸入 要搜尋的型號 來找到是屬於哪顆硬碟,當然也可以改成搜尋序號
但最大的問題是,他太慢了!
在最後的 Console.WriteLine("4 {0}", diskDrives.Count); 的部份下,等太久了~
該怎麼解決呢~><
還是有其他的function可以解決呢?
class TestProgram
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Console.Write("Input the string1 that you want to search disk model:");
string searchStr1 = Console.ReadLine();
Console.Write("Input the string2 taht you want to search disk model:");
string searchStr2 = Console.ReadLine();
string getUP_HD = ""; string selectString = "SELECT * FROM Win32_DiskDrive where"; if (searchStr1.Trim().Length != 0 || searchStr2.Trim().Length != 0)
{
if (searchStr1.Trim().Length != 0)
{
selectString += (" model like '%" + searchStr1.Trim() + "%'");
if (searchStr2.Trim().Length != 0)
{
selectString += " and " + " model like '%" + searchStr2.Trim() + "%'";
}
}
else
{
if (searchStr2.Trim().Length != 0)
{
selectString += (" model like '%" + searchStr2.Trim() + "%'");
}
}
}
Console.WriteLine(selectString);
ManagementObjectSearcher searcherall = new ManagementObjectSearcher(selectString); Console.WriteLine("1 {0}", searcherall.Get().Count);
foreach (ManagementObject wmi_HD in searcherall.Get())
{
Console.WriteLine(wmi_HD["Model"].ToString()); Console.WriteLine("2 {0}", Convert.ToInt32(wmi_HD["Partitions"].ToString()));
for (int a = 0; a < Convert.ToInt32(wmi_HD["Partitions"].ToString()); a++)
{
string searchStr = string.Format("Where DeviceID = 'Disk #{0}, Partition #{1}'", wmi_HD["Index"].ToString(), a);
ManagementObjectCollection partitions = new ManagementObjectSearcher(@"Select * From Win32_DiskPartition " + searchStr).Get(); Console.WriteLine("3 {0}", partitions.Count);
foreach (ManagementObject partition in partitions)
{
ManagementObjectCollection diskDrives =
new ManagementObjectSearcher
("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} " +
"WHERE AssocClass = Win32_LogicalDiskToPartition").Get();
Console.WriteLine("4 {0}", diskDrives.Count);
foreach (ManagementObject diskDrive in diskDrives)
{
getUP_HD = diskDrive["caption"].ToString();
Console.WriteLine("The '{0}' and '{1}' Disk is {2}",searchStr1,searchStr2, getUP_HD);
//Console.WriteLine("UP Caption :"+getUP_HD);
}
}
}
} Console.WriteLine("Press [Enter] to exit...");
Console.ReadLine();
}
}
但最大的問題是,他太慢了!
在最後的 Console.WriteLine("4 {0}", diskDrives.Count); 的部份下,等太久了~
該怎麼解決呢~><
還是有其他的function可以解決呢?
class TestProgram
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Console.Write("Input the string1 that you want to search disk model:");
string searchStr1 = Console.ReadLine();
Console.Write("Input the string2 taht you want to search disk model:");
string searchStr2 = Console.ReadLine();
string getUP_HD = ""; string selectString = "SELECT * FROM Win32_DiskDrive where"; if (searchStr1.Trim().Length != 0 || searchStr2.Trim().Length != 0)
{
if (searchStr1.Trim().Length != 0)
{
selectString += (" model like '%" + searchStr1.Trim() + "%'");
if (searchStr2.Trim().Length != 0)
{
selectString += " and " + " model like '%" + searchStr2.Trim() + "%'";
}
}
else
{
if (searchStr2.Trim().Length != 0)
{
selectString += (" model like '%" + searchStr2.Trim() + "%'");
}
}
}
Console.WriteLine(selectString);
ManagementObjectSearcher searcherall = new ManagementObjectSearcher(selectString); Console.WriteLine("1 {0}", searcherall.Get().Count);
foreach (ManagementObject wmi_HD in searcherall.Get())
{
Console.WriteLine(wmi_HD["Model"].ToString()); Console.WriteLine("2 {0}", Convert.ToInt32(wmi_HD["Partitions"].ToString()));
for (int a = 0; a < Convert.ToInt32(wmi_HD["Partitions"].ToString()); a++)
{
string searchStr = string.Format("Where DeviceID = 'Disk #{0}, Partition #{1}'", wmi_HD["Index"].ToString(), a);
ManagementObjectCollection partitions = new ManagementObjectSearcher(@"Select * From Win32_DiskPartition " + searchStr).Get(); Console.WriteLine("3 {0}", partitions.Count);
foreach (ManagementObject partition in partitions)
{
ManagementObjectCollection diskDrives =
new ManagementObjectSearcher
("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} " +
"WHERE AssocClass = Win32_LogicalDiskToPartition").Get();
Console.WriteLine("4 {0}", diskDrives.Count);
foreach (ManagementObject diskDrive in diskDrives)
{
getUP_HD = diskDrive["caption"].ToString();
Console.WriteLine("The '{0}' and '{1}' Disk is {2}",searchStr1,searchStr2, getUP_HD);
//Console.WriteLine("UP Caption :"+getUP_HD);
}
}
}
} Console.WriteLine("Press [Enter] to exit...");
Console.ReadLine();
}
}
你跟下程序 看看多少数据 然后就写个存储过程试试看
我進行測試發現,大部份循環一次時間拖最長的還是最裡面的那一次