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:
--------------------编程问答-------------------- 太完美了 哈哈哈啊 谢谢最后的大侠 --------------------编程问答-------------------- 完美,标记 --------------------编程问答--------------------
拆开了 用卡尺量量 --------------------编程问答--------------------
嗯 是的 用游标卡尺 准确点!
补充:.NET技术 , C#