您的位置:首页 > 其它

【工作记录】筛选、查询本机磁盘

2016-11-11 22:36 267 查看
      最近在公司被调到去做一个***Server端项目,清单里第一个工作就是读取磁盘,因为我们的电脑里会有很多磁盘,比如:本地磁盘、CD盘、移动硬盘、网盘(Data盘)……,我今天的需求就是读取属于本机的本地磁盘,获取其盘符名称,剩余空间大小,然后计算新下载的游戏能否下载到该盘符中。

       OK,这个东西之前没有整过,网上资料也很多,最终参考MSDN里的方法:https://msdn.microsoft.com/en-us/library/aa394173
,使用Win32_LogicalDisk这个工具类,来进行读取操作,查询盘符操作如下

public list<string> QueryLocalData()
{
List<string> deviceIDs = new List<string>();
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); //Win64_LogicalDisk
ManagementObjectCollection queryCollection = query.Get();
foreach (ManagementObject mo in queryCollection)
{
switch (int.Parse(mo["DriveType"].ToString()))
{
case (int)DriveType.Removable: //可以移动磁盘
{
//MessageBox.Show("可以移动磁盘");
deviceIDs.Add(mo["DeviceID"].ToString());
break;
}
case (int)DriveType.Fixed: //本地磁盘
{
//MessageBox.Show("本地磁盘");
deviceIDs.Add(mo["DeviceID"].ToString());
break;
}
case (int)DriveType.CDRom: //CD rom drives
{
//MessageBox.Show("CD rom drives ");
break;
}
case (int)DriveType.Network: //网络驱动
{
//MessageBox.Show("网络驱动器 ");
break;
}
case (int)DriveType.Ram:
{
//MessageBox.Show("驱动器是一个 RAM 磁盘 ");
break;
}
case (int)DriveType.NoRootDirectory:
{
//MessageBox.Show("驱动器没有根目录 ");
break;
}
default: //defalut to folder
{
//MessageBox.Show("驱动器类型未知 ");
break;
}
return deviceIDs;
}
}
}     
要注意,是没有Win64_LogicalDisk的哦~~~
      so,调用这个方法,这样子找到了本机上的盘符,当然对于寻找其他种类的盘符,可以在相应的“case”下面,加入“deviceIDs.Add(mo["DeviceID"].ToString());”这句。
      

       对于获取相应盘符下的剩余内存,将其写到Main()方法当中,代码片段如下:

const int HARD_DISK = 3; string strComputer = ".";
ManagementScope namespaceScope = new ManagementScope("\\\\" + strComputer + "\\ROOT\\CIMV2");
ObjectQuery diskQuery = new ObjectQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType = " + HARD_DISK + "");
ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher(namespaceScope, diskQuery);
ManagementObjectCollection colDisks = mgmtObjSearcher.Get();
foreach (ManagementObject objDisk in colDisks)
{
Console.WriteLine("Device ID : {0}", objDisk["DeviceID"]);
Console.WriteLine("Free Disk Space : {0}", objDisk["FreeSpace"]);
Console.ReadLine();
}     
参考MSDN:
      



       可以得知,上述代码段中,“HARD_DISK = 3”就是说明,获取的盘符类型是“Local Disk”即本地磁盘。

      
至此,用C#获取机器盘符并获取剩余大小操作即完成,其他业务代码就不予以展示了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: