GetLogicalDrives,GetLogicalDriveStrings,GetDri...

本文介绍使用C++获取Windows系统中所有逻辑驱动器,并通过GetLogicalDrives和GetDriveType函数识别每块磁盘的类型,包括固定硬盘、可移动设备、CD-ROM等。
 GetLogicalDrives,GetLogicalDriveStrings,GetDriveType

#include "stdafx.h"  
#include <tchar.h>  
#include <Windows.h>  
#include <bitset>  
#include <iostream>   
#ifdef _UNICODE  
#define tcout   wcout  
#else  
#define tcout   cout  
#endif  
int _tmain(int argc, _TCHAR* argv[])  
{  
    TCHAR tables[][4] = {  
                _T("A://"),  
                _T("B://"),  
                _T("C://"),  
                _T("D://"),  
                _T("E://"),  
                _T("F://"),  
                _T("G://"),  
                _T("H://")  
    };  
      
    std::bitset<32> bitMap(::GetLogicalDrives());  
    for (size_t i = 0; i < bitMap.size() && i < sizeof(tables) / 4; i++)  
    {  
        if (bitMap[i])  
        {  
            std::tcout << tables[i] << std::endl;  
        }  
    }  
    std::cout << _T("--------------------------------------------") << std::endl;  
    TCHAR pszBuffer[MAX_PATH];  
    DWORD nCnt = ::GetLogicalDriveStrings(MAX_PATH, pszBuffer);  
    TCHAR* p;  
    if (nCnt > 0)  
    {  
        p = pszBuffer;  
        while (*p != _T('/0'))  
        {  
            std::tcout << p << std::endl;  
            p = p + _tcslen(p) + 1;  
        }  
    }  
  
    /*TCHAR szBuffer[MAX_PATH]; 
    HANDLE handle = ::FindFirstVolume(szBuffer, MAX_PATH); 
    if (handle != NULL) 
    { 
        do{ 
            std::tcout << szBuffer << std::endl; 
        }while (::FindNextVolume(handle, szBuffer, MAX_PATH)); 
        ::FindVolumeClose(handle); 
    }*/  
    for (size_t i = 0; i < sizeof(tables) / 4; i++)  
    {  
        UINT nRet = ::GetDriveType(tables[i]);  
        //#define DRIVE_UNKNOWN     0  
        //#define DRIVE_NO_ROOT_DIR 1  
        //#define DRIVE_REMOVABLE   2  
        //#define DRIVE_FIXED       3  
        //#define DRIVE_REMOTE      4  
        //#define DRIVE_CDROM       5  
        //#define DRIVE_RAMDISK     6  
        switch (nRet)  
        {  
        case DRIVE_UNKNOWN:  
            std::tcout << tables[i] << _T("DRIVE_UNKNOWN") << std::endl;  
            break;  
        case DRIVE_NO_ROOT_DIR:  
            std::tcout << tables[i] << _T("DRIVE_NO_ROOT_DIR") << std::endl;  
            break;  
        case DRIVE_REMOVABLE:  
            std::tcout << tables[i] << _T("DRIVE_REMOVABLE") << std::endl;  
            break;  
        case DRIVE_FIXED:  
            std::tcout << tables[i] << _T("DRIVE_FIXED") << std::endl;  
            break;  
        case DRIVE_REMOTE:  
            std::tcout << tables[i] << _T("DRIVE_REMOTE") << std::endl;  
            break;  
        case DRIVE_CDROM:  
            std::tcout << tables[i] << _T("DRIVE_CDROM") << std::endl;  
            break;  
        case DRIVE_RAMDISK:  
            std::tcout << tables[i] << _T("DRIVE_RAMDISK") << std::endl;  
            break;  
        }  
    }  
  
      
    return 0;  
}


转载于:https://my.oschina.net/ypimgt/blog/68478

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值