• 获取驱动器盘符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);
    }
    

      

  • 相关阅读:
    Oracle 10g AND Oracle 11g手工建库案例--Oracle 11g
    第十七篇:实例分析(1)--初探WDDM驱动学习笔记(八)
    Git权威指南学习笔记(二)Git暂存区
    C++11多线程教学II
    c++ 11 多线程教学(1)
    C++11 多线程 基础
    C++11下的线程池以及灵活的functional + bind + lamda
    intel线程库tbb的使用
    TBB入门
    TTB 基本
  • 原文地址:https://www.cnblogs.com/tiredoy/p/3352910.html
Copyright © 2020-2023  润新知