如何获取本地磁盘的数量和对应的分区号

alwgg 2013-02-08 07:06:32
比如有这么个情况,
我的电脑里有两块硬盘,第二快硬盘分了4个区
我想知道本地有多少硬盘,第二块硬盘的第一个分区,被分配的盘符是多少 可能是d:也可能是e:当然也可能没有给他分配盘符
各位师哥师姐,有什么办法吗?
...全文
536 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
alwgg 2013-02-26
  • 打赏
  • 举报
回复
引用 5 楼 yaojun2 的回复:
楼主快来结贴呀,,我把答案给你了,,再不结我没分提问了。
嘿嘿,大虾 不好意思好久没有踏足这里了, 这就给你结贴
隐身 2013-02-21
  • 打赏
  • 举报
回复
楼主快来结贴呀,,我把答案给你了,,再不结我没分提问了。
隐身 2013-02-19
  • 打赏
  • 举报
回复

typedef _VOLUME_INFO
{
	TCHAR	chFlag;
	DWORD	dwDiskNumber;
}VOLUME_INFO, *PVOLUME_INFO

BOOL GetVolumeInfo(IN TCHAR chFlag, OUT PVOLUME_INFO pVolumeInfo)
{
	TCHAR szVol[] = { '\\', '\\', '.', '\\', chFlag, ':', 0};
	HANDLE hDrv = CreateFile(szVol, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
	if (INVALID_HANDLE_VALUE == hDrv)
	{
		return FALSE;
	}
	VOLUME_DISK_EXTENTS vde;
	DWORD dwBytes;
	BOOL bOK = DeviceIoControl(hDrv, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0,&vde, sizeof(vde), &dwBytes, NULL);
	if (!bOK)
	{
		CloseHandle(hDrv);
		return FALSE;
	}
	pVolumeInfo->chFlag = chFlag;							//分区盘符
	pVolumeInfo->dwDiskNumber = vde.Extents->DiskNumber;	//分区所在硬盘编号,基于0
	return TRUE;
}
要获取有多少块硬盘,循环调用CreateFile(_T("\\\\.\\PhysicalDrive%d"),....) 要知道第二块硬盘的第一个分区的卷标,只需:

for (TCHAR chFlag = 'A'; chFlag <= 'Z'; ++chFlag)
{
	PVOLUME_INFO pi = {0};
	GetVolumeInfo(chFlag, &pi);
}
Yofoo 2013-02-18
  • 打赏
  • 举报
回复
WMI枚举实例, 然后获取关联类 Win32_DiskDrive (第几块物理硬盘) -> Win32_DiskPartition(第几分区) -> Win32_DiskPartition (盘符C,D) 还有个方法, 获取系统符号链接(SymbolicLink) 结果如下, 也是一样的 \\Device\Harddisk0\Partition1 SymbolicLink \Device\HarddiskVolume1 \\GLOBAL??\C: SymbolicLink \Device\HarddiskVolume1
alwgg 2013-02-08
  • 打赏
  • 举报
回复
引用 1 楼 slek 的回复:
TCHAR Drive[256]={0}; DWORD len = GetLogicalDriveStrings(sizeof(Drive)/sizeof(TCHAR),Drive); for(i=0;i<len;i+=4) { printf("\n"&Drive[i]); } 磁盘数量可以用len除以4就可以得到了。
我并不是要枚举盘符,这个我知道, 且你的代码,也许是直接在这里手敲的缘故,存在太多本不该存在的错误了 无需要知道的是,比如D盘,对应的是哪个硬盘的哪个分区 这样说,你能明白吗?
西山小月 2013-02-08
  • 打赏
  • 举报
回复
TCHAR Drive[256]={0}; DWORD len = GetLogicalDriveStrings(sizeof(Drive)/sizeof(TCHAR),Drive); for(i=0;i<len;i+=4) { printf("\n"&Drive[i]); } 磁盘数量可以用len除以4就可以得到了。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧