磁盘信息的获取目前只获取磁盘名称,磁盘标卷,磁盘总容量,可用磁盘空间,文件系统。当然,磁盘的信息还有很多,比如硬盘的温度之类的,考虑到技术上的问题,这些暂时不考虑。OK,效果图先上:
同样的,需要一个类,命名为:DiskInfo,简单说明一下,本次获取信息的方法是采用WMI,用结构体表示各个属性,类图及代码如下:
DiskInfo
public class DiskInfo
{
public struct DiskInfoStruct
{
public string strDiskName; //磁盘名称
public string strVolumeName; //磁盘标卷
public long lDiskSize; //磁盘大小
public long lDiskFreeSpace; //可用磁盘空间
public string strDiskFileSystem; //文件系统(FAT32,NTFS等)
}
public List<DiskInfoStruct> GetDiskInfo()
{
List<DiskInfoStruct> lDiskInfo = new List<DiskInfoStruct>();
DiskInfoStruct diskInfoStruct;
//实例化一个ManagementClass类,并将Win32_LogicalDisk作为参数传递进去,
//这样就可以查询Win32_LogicalDisk这个类里面的一些信息了。
ManagementClass mClass = new ManagementClass("Win32_LogicalDisk");
//获取Win32_LogicalDisk这个类的所有实例
ManagementObjectCollection moCollection = mClass.GetInstances();
//对Win32_OperatingSystem这个类进行遍历
foreach (ManagementObject mObject in moCollection)
{
//判断磁盘是否为固定磁盘,即硬盘
if (Int32.Parse(mObject["DriveType"].ToString()) == (int)System.IO.DriveType.Fixed)
{
diskInfoStruct.strDiskName = mObject["Name"].ToString(); //获取磁盘名称
diskInfoStruct.strVolumeName = mObject["VolumeName"].ToString(); //获取磁盘标卷
diskInfoStruct.lDiskSize = long.Parse(mObject["Size"].ToString()); //获取磁盘大小
diskInfoStruct.lDiskFreeSpace = long.Parse(mObject["FreeSpace"].ToString()); //获取磁盘可用空间
diskInfoStruct.strDiskFileSystem = mObject["FileSystem"].ToString(); //获取磁盘文件系统
lDiskInfo.Add(diskInfoStruct);
}
}
return lDiskInfo;
}
}
public class DiskInfo
{
public struct DiskInfoStruct
{
public string strDiskName; //磁盘名称
public string strVolumeName; //磁盘标卷
public long lDiskSize; //磁盘大小
public long lDiskFreeSpace; //可用磁盘空间
public string strDiskFileSystem; //文件系统(FAT32,NTFS等)
}
public List<DiskInfoStruct> GetDiskInfo()
{
List<DiskInfoStruct> lDiskInfo = new List<DiskInfoStruct>();
DiskInfoStruct diskInfoStruct;
//实例化一个ManagementClass类,并将Win32_LogicalDisk作为参数传递进去,
//这样就可以查询Win32_LogicalDisk这个类里面的一些信息了。
ManagementClass mClass = new ManagementClass("Win32_LogicalDisk");
//获取Win32_LogicalDisk这个类的所有实例
ManagementObjectCollection moCollection = mClass.GetInstances();
//对Win32_OperatingSystem这个类进行遍历
foreach (ManagementObject mObject in moCollection)
{
//判断磁盘是否为固定磁盘,即硬盘
if (Int32.Parse(mObject["DriveType"].ToString()) == (int)System.IO.DriveType.Fixed)
{
diskInfoStruct.strDiskName = mObject["Name"].ToString(); //获取磁盘名称
diskInfoStruct.strVolumeName = mObject["VolumeName"].ToString(); //获取磁盘标卷
diskInfoStruct.lDiskSize = long.Parse(mObject["Size"].ToString()); //获取磁盘大小
diskInfoStruct.lDiskFreeSpace = long.Parse(mObject["FreeSpace"].ToString()); //获取磁盘可用空间
diskInfoStruct.strDiskFileSystem = mObject["FileSystem"].ToString(); //获取磁盘文件系统
lDiskInfo.Add(diskInfoStruct);
}
}
return lDiskInfo;
}
}
同样的,新建一个窗体,命名为:DiskInfoForm,布局如效果图所示,代码如下:
DiskInfo Form
public partial class DiskInfoForm : Form
{
public DiskInfoForm()
{
InitializeComponent();
}
private void DiskInfoForm_Load(object sender, EventArgs e)
{
ComputerInfo.DiskInfo diskInfo = new ComputerInfo.DiskInfo();
List<ComputerInfo.DiskInfo.DiskInfoStruct> lDiskInfo = diskInfo.GetDiskInfo();
ListViewItem itemDiskInfo;
for (int i=0;i<lDiskInfo.Count;i++)
{
itemDiskInfo = new ListViewItem(lDiskInfo[i].strDiskName+"("+lDiskInfo[i].strVolumeName+")");
itemDiskInfo.SubItems.Add((lDiskInfo[i].lDiskSize / 1000 / 1000).ToString("0,0") + "G");
itemDiskInfo.SubItems.Add((lDiskInfo[i].lDiskFreeSpace / 1000 / 1000).ToString("0,0") + "G");
itemDiskInfo.SubItems.Add(lDiskInfo[i].strDiskFileSystem);
lvDiskInfo.Items.Add(itemDiskInfo);
}
}
}
public partial class DiskInfoForm : Form
{
public DiskInfoForm()
{
InitializeComponent();
}
private void DiskInfoForm_Load(object sender, EventArgs e)
{
ComputerInfo.DiskInfo diskInfo = new ComputerInfo.DiskInfo();
List<ComputerInfo.DiskInfo.DiskInfoStruct> lDiskInfo = diskInfo.GetDiskInfo();
ListViewItem itemDiskInfo;
for (int i=0;i<lDiskInfo.Count;i++)
{
itemDiskInfo = new ListViewItem(lDiskInfo[i].strDiskName+"("+lDiskInfo[i].strVolumeName+")");
itemDiskInfo.SubItems.Add((lDiskInfo[i].lDiskSize / 1000 / 1000).ToString("0,0") + "G");
itemDiskInfo.SubItems.Add((lDiskInfo[i].lDiskFreeSpace / 1000 / 1000).ToString("0,0") + "G");
itemDiskInfo.SubItems.Add(lDiskInfo[i].strDiskFileSystem);
lvDiskInfo.Items.Add(itemDiskInfo);
}
}
}
以上代码都比较简单,我就不一一解释了,有不懂的可以回复,我会第一时间解答。
哈哈,又完成了一个,离终点又近了一步,哈哈。。努力,努力~~
未完,待续~~~