zoukankan      html  css  js  c++  java
  • 获取驱动器盘符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);
    }
    

      

  • 相关阅读:
    树莓派测试摄像头
    React Native入坑记录
    2016总结及2017计划
    C#操作Excel
    IntelliJ配置SpringMVC提示“found:java.lang.String required:java.lang.String”
    opencv手工编译
    iOS webview注入JS
    C#生成exe、dll版本号自动增加
    iOS 允许po打印frame等内容
    2015总结及2016计划
  • 原文地址:https://www.cnblogs.com/tiredoy/p/3352910.html
Copyright © 2011-2022 走看看