获取驱动器盘符2--代码部分

演示如上所示,如果你想看看怎么做的,请点这里

 

-----------------------------------------------------------------

GetLogicalDrives()函数介绍

函数原型

DWORD WINAPI GetLogicalDrives(void);

该函数不带任何参数,并返回一个unsigned int类型的值。

返回的值,是一个位掩码(bitmask),代表当前可用的驱动器盘符。从低位开始,0号位置表示盘符A,位置1表示盘符B,位置2表示盘符C;

举例子,如demo演示的程序,返回的是508,将它转换为二进制,则为

       1   1   1    1   1    1   1    0    0

对应的盘符为 I    H  G    F    E   D   C    B    A

根据对应的bitmask,1表示该盘符可用,0表示不可用。所以获取的盘符有C,D,E,F,G,H,I.

这便是如何获取的方法。

 

关于处理bitmask,也有两种方法。


 

方法一

将返回的数值边转换为二进制,边处理。每次取得最低位,就将它和对应的盘符比较,如果数值为1,就将该盘符加到可用盘符列表中;如果数值为0,则忽略该盘符。

void Cdemo1Dlg::OnBnClickedget()
{
	// TODO: 在此添加控件通知处理程序代码
	CString str_drives=L"获取的盘符有:";
	unsigned int n_drives=GetLogicalDrives();
	wchar_t wdrive[3]=L"A:";
	while(n_drives)
	{
		if(n_drives%2)
		{
			str_drives+=wdrive;
			str_drives+=L" , ";
		}
		wdrive[0]++;
		n_drives/=2;
	}
	edit_data=str_drives;
	UpdateData(FALSE);
}

  注:该代码是在MFC环境下的,该函数为一个按钮的点击事件,当用户点击按钮,程序执行这段函数。

eidt_data为一个EDIT控件的控件变量,用来显示获取的盘符。

方法二

第二种方法则直接使用位操作,将获取的数值和1进行与运算,然后再进行移位操作

void Cdemo1Dlg::OnBnClickedget()
{
	// TODO: 在此添加控件通知处理程序代码
	CString str_drives=L"获取的盘符有:";
	unsigned int n_drives=GetLogicalDrives();
	wchar_t wdrive[3]=L"A:";
	while(n_drives)
	{
		if(n_drives&1)
		{
			str_drives+=wdrive;
			str_drives+=L" , ";
		}
		wdrive[0]++;
		n_drives>>=1;
	}
	edit_data=str_drives;
	UpdateData(FALSE);
}

  

posted @ 2013-10-05 22:21  tiredoy  阅读(341)  评论(0编辑  收藏  举报