【Windows API】获取卷标、卷名

文章介绍了如何使用WindowsAPI函数FindFirstVolume和FindNextVolume枚举系统卷并获取卷标,以及通过GetVolumeNameForVolumeMountPoint获取卷名,展示了两种处理卷信息的方法。

 1、卷->卷标

使用FindFirstVolume()和FindNextVolume()函数体系,枚举系统所有卷(Volume)的例子,然后获取卷标、卷类型。这个方式可以枚举出没有驱动器号(卷标)的卷。

int TestMode1()
{
    HANDLE hVolume = INVALID_HANDLE_VALUE;
    TCHAR tszVolumeName[MAX_PATH] = {0};
    TCHAR tszVolumePath[MAX_PATH] = {0};
    BOOL bRet;

    DWORD dwError;
    DWORD dwCount;
    UINT nDriveType;

    //1、获取卷名称
    hVolume = FindFirstVolume(tszVolumeName, ARRAYSIZE(tszVolumeName));

    if (hVolume == INVALID_HANDLE_VALUE)
    {
        wprintf(_T("FindFirstVolume() failed, error code = %d"), GetLastError());
        return -1;
    }

    while (1)
    {
        //2、获取卷路径
        dwCount = ARRAYSIZE(tszVolumePath);
        bRet = GetVolumePathNamesForVolumeName(tszVolumeName, tszVolumePath, dwCount, &dwCount);

        if (!bRet)
        {
            dwError = GetLastError();
            wprintf(_T("GetVolumePathNamesForVolumeName() failed, error code = %d"), dwError);

            getchar();
            return -1;
        }

        //3、获取驱动器类型
        nDriveType = GetDriveType(tszVolumePath);

        wprintf(_T("Volume name: %s\r\n"), tszVolumeName);
        wprintf(_T("Volume path: %s\r\n"), tszVolumePath);
        wprintf(_T("Drive type: %d\r\n\r\n"), nDriveType);

        bRet = FindNextVolume(hVolume, tszVolumeName, ARRAYSIZE(tszVolumeName));

        if (!bRet)
        {
            dwError = GetLastError();

            if (dwError != ERROR_NO_MORE_FILES)
            {
                wprintf(_T("FindNextVolume() failed, error code = %d"), dwError);
                return -1;
            }

            break;
        }
    }

    wprintf(_T("Test 2 end!\r\n\r\n"));
    //getchar();

    return 0;
}

输入

 

2、卷标->卷名

通过卷标(驱动器号)获取卷名,需要使用GetVolumeNameForVolumeMountPoint()函数。

int TestMode2()
{
    TCHAR tszLogicDriveStrings[1024] = {0};
    LPCTSTR szDrive = NULL;
    TCHAR tszVolumeName[MAX_PATH];

    GetLogicalDriveStrings(sizeof(tszLogicDriveStrings) / sizeof(TCHAR) - 1, tszLogicDriveStrings);
    szDrive = (LPCTSTR)tszLogicDriveStrings;

    do
    {
        GetVolumeNameForVolumeMountPoint(szDrive, tszVolumeName, sizeof(tszVolumeName) / sizeof(TCHAR));
        wprintf(_T("Drive %s, Volume name: %s\r\n"), szDrive, tszVolumeName);
        szDrive += (lstrlen(szDrive) + 1);
    } while (*szDrive != _T('\x00'));

    wprintf(_T("\r\nTest 1 end!\r\n\r\n"));

    return 0;
}

输出

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值