当前位置:编程学习 > C#/ASP.NET >>

c# 获取硬盘与盘符信息的问题

问题1:  已知盘符,如何获取物理硬盘的型号(非序列号)?
问题2:  已知硬盘,如何获取其分区的盘符分别是什么? --------------------编程问答-------------------- private void button1_Click(object sender, System.EventArgs e)
 {
            ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk");
             ManagementObjectCollection disks = diskClass.GetInstances();
            foreach(ManagementObject disk in disks)
            {
                try
                {
                  Console.WriteLine(disk["Name"].ToString());
                     
               }
               catch(Exception exc)
              {
                  MessageBox.Show(exc.Message, "提示");
               }
          } 

 ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
        String hardDiskID=null;
        foreach (ManagementObject mo in searcher.Get())
        {
            hardDiskID = mo["SerialNumber"].ToString().Trim();
            break;
        }
--------------------编程问答-------------------- 楼上这个是获取硬盘序列号和盘符的~~~

不是获取硬盘型号的~~~ --------------------编程问答-------------------- 谢谢人生如梦,但是你写代码不能解决多硬盘时,硬盘与盘符一一对应的关系. --------------------编程问答-------------------- 另外,还有一个问题可能出现,那就是硬盘的盘符可能会被人为修改。也就是盘符错乱的情况。如:
磁盘0:C D E
磁盘1:F I
磁盘2:G H
如何在盘符混乱的情况下准确地获得硬盘的分区情况:
不知哪位高人有好办法。 --------------------编程问答-------------------- 给你一个例子 
获取系统驱动器信息的一个窗体程序,有代码。

下载 --------------------编程问答-------------------- 谢谢楼上的,但是代码太古老,而且也只能实现列出所有盘符,不能了解与硬盘的对应关系。 --------------------编程问答-------------------- 高手们有没有解决办法啊?救命啊。 --------------------编程问答-------------------- ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach(ManagementObject mo in moc1)
{
HDid = (string)mo.Properties["Model"].Value;
Console.WriteLine("硬盘序列号:"+HDid.ToString ());
}
硬盘序列号截取下就是硬盘型号了。 --------------------编程问答-------------------- 借LZ的宝地一用,
怎么获取硬盘的尺寸,比如是 2.5寸的还是3.5寸的盘?? --------------------编程问答-------------------- 8楼搞错了,你的代码是遍历硬盘的型号,而不是序列号,而且这种方法获取的序列号也不是硬盘序列号,而是分区的序列号,不是硬盘唯一的序列号。 --------------------编程问答-------------------- 学习,我也写过这些。只是玩玩而已。 --------------------编程问答--------------------
Directory.GetLogicalDrives()
--------------------编程问答-------------------- 支持一下! --------------------编程问答-------------------- 12楼,你用的方法是:检索此计算机上格式为“<驱动器号>:\”的逻辑驱动器的名称。是获取电脑上所有磁盘名称。没有形成硬盘与盘符对应关系。 --------------------编程问答-------------------- 以前用VC弄过不过好像要用到底层函数。不管他是格多少次盘都始终是那一个序列号。这是硬盘出厂序号。。要用底层函数才能获取。
--------------------编程问答--------------------             //Get partition number on each hard disk
            ManagementObjectSearcher getPartitionsOnDisk = new
                ManagementObjectSearcher("select * from Win32_DiskDrive");
            //Get partition property, like Type, volume name,lable
            ManagementObjectSearcher getPartitionProperty = new
                ManagementObjectSearcher("select * from  Win32_LogicalDisk");
            //Get partition and disk index.
            ManagementObjectSearcher getDiskAndPartitionIndex = new
                ManagementObjectSearcher("select * from    
                           Win32_LogicalDiskToPartition");
            //Get if partition is boot partition
            ManagementObjectSearcher IsBootPartition = new
                ManagementObjectSearcher("select * from  Win32_DiskPartition");
这是基本要用到的几个类,然后LZ可以根据partition和disk index来写一个判断来决定哪个partition属于那块硬盘,我是用了一个二维数组在进行储存和判断的 --------------------编程问答-------------------- 谢谢lexfu,我研究了几个win32_但是还是不太清楚,麻烦你能不能说得细一点?用哪一个类里的哪一个功能? --------------------编程问答-------------------- http://topic.csdn.net/t/20050517/16/4013955.html
http://download.csdn.net/source/156475
第一个连接里讲的很多 --------------------编程问答--------------------
private   string[]   GetMoc()   
  {   
  string[]   str   =   new   string[2];   
  ManagementClass   mcCpu   =   new   ManagementClass("win32_Processor");   
  ManagementObjectCollection   mocCpu   =   mcCpu.GetInstances();   
  foreach(ManagementObject   m   in   mocCpu)   
  {   
  str[0]   =   m["ProcessorId"].ToString();   
  }   
    
  ManagementClass   mcHD   =   new   ManagementClass("win32_logicaldisk");   
  ManagementObjectCollection   mocHD   =   mcHD.GetInstances();   
  foreach(ManagementObject   m   in   mocHD)   
  {   
  if(m["DeviceID"].ToString()   ==   "C:")   
  {   
  str[1]   =   m["VolumeSerialNumber"].ToString();   
  break;   
  }   
  }   
  return   str;   
  }
--------------------编程问答--------------------
string[] str = Environment.GetLogicalDrives();
--------------------编程问答-------------------- 楼主找到方法了没有,我也正需要,能发告知 --------------------编程问答-------------------- 不会                           
帮顶一下 --------------------编程问答-------------------- http://www.bitscn.com/pdb/dotnet/200605/24646.html

每次写文件前,判断现在D盘是否有大于50G的可用空间,而且计算出有多少(X-50)G可用的空间,然后判断本次写入的文件是否有足够的空间来写入,不够则考虑删除部分过旧的文件,然后在写入,或者直接提示D盘空间不够用 --------------------编程问答--------------------  这么久了,还有分给吗?

 private void button5_Click(object sender, EventArgs e)
        {
            ManagementClass DiskClass;
            using (DiskClass = new ManagementClass(@"Win32_Diskdrive"))
            {
                ManagementObjectCollection Moc = DiskClass.GetInstances();
                foreach (ManagementObject Mo_Disk in Moc)
                {
                    Console.WriteLine(Mo_Disk["Model"]);
                    {
                        foreach (ManagementObject Mo_Partition in   Mo_Disk.GetRelated("Win32_DiskPartition"))
                        {
                            Console.WriteLine("{0}", Mo_Partition["Name"]);
                            foreach (ManagementBaseObject Mbo_Logical in Mo_Partition.GetRelated("Win32_LogicalDisk"))
                            {
                                Console.WriteLine("{0}", Mbo_Logical["Name"]);
                             }
                        }
                    }
                }
            }
        }
输出如下:

WDC WD3200BEVS-08VAT2
磁盘 #0,分区 #0
C:
磁盘 #0,分区 #1
D:
E:
F:
G:
H:
General USB Flash Disk USB Device
磁盘 #1,分区 #0
J:

--------------------编程问答-------------------- 太完美了 哈哈哈啊 谢谢最后的大侠 --------------------编程问答-------------------- 完美,标记 --------------------编程问答--------------------
引用 9 楼 wfcfan 的回复:
借LZ的宝地一用,
怎么获取硬盘的尺寸,比如是 2.5寸的还是3.5寸的盘??


拆开了 用卡尺量量 --------------------编程问答--------------------
引用 27 楼 sunzongbao2007 的回复:
引用 9 楼 wfcfan 的回复:

借LZ的宝地一用,
怎么获取硬盘的尺寸,比如是 2.5寸的还是3.5寸的盘??


拆开了 用卡尺量量


嗯 是的  用游标卡尺 准确点!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,