輸入 要搜尋的型號 來找到是屬於哪顆硬碟,當然也可以改成搜尋序號
但最大的問題是,他太慢了!
在最後的 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();
}
}