使用的API
GetDriveType
和GetVolumeInformation
获取驱动器的类型
我们使用GetDriveType
可以获取驱动器类型
代码
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
BOOL GetDriverInfo(PCWSTR szDrive) {
wprintf(L"%s ", szDrive);
UINT uDriveType;
// 获取驱动器属性
uDriveType = GetDriveType(szDrive);
switch (uDriveType)
{
case DRIVE_UNKNOWN: // 类型不识别
printf("The drive type can not detected!");
break;
case DRIVE_NO_ROOT_DIR:
printf("The root path is invalid");
break;
case DRIVE_REMOVABLE:
printf("可移动的,软盘或者可移动的硬盘");
break;
case DRIVE_FIXED: // DRIVE_FIXED为硬盘
printf("硬盘, 不能移动的");
break;
case DRIVE_REMOTE:
printf("通过网络共享过来的");
break;
case DRIVE_CDROM:
printf("光盘");
break;
case DRIVE_RAMDISK:
printf("U盘");
break;
default:
break;
}
return 0;
}
int main() {
BOOL flag;
flag = GetDriverInfo(TEXT("C:\\"));
return flag;
}
运行效果
获取更加详细的关于驱动器属性的信息
我们使用GetVolumeInformation
API
代码
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
BOOL GetDriverInfo(PCWSTR szDrive) {
wprintf(L"%s ", szDrive);
UINT uDriveType;
// 获取驱动器属性
uDriveType = GetDriveType(szDrive);
switch (uDriveType)
{
case DRIVE_UNKNOWN: // 类型不识别
printf("The drive type can not detected!");
break;
case DRIVE_NO_ROOT_DIR:
printf("The root path is invalid");
break;
case DRIVE_REMOVABLE:
printf("可移动的,软盘或者可移动的硬盘");
break;
case DRIVE_FIXED: // DRIVE_FIXED为硬盘
printf("硬盘, 不能移动的");
break;
case DRIVE_REMOTE:
printf("通过网络共享过来的");
break;
case DRIVE_CDROM:
printf("光盘");
break;
case DRIVE_RAMDISK:
printf("U盘");
break;
default:
break;
}
WCHAR szDriveName[BUFSIZ]; // 驱动器名称
DWORD dwVolumeSerialNumber; // 硬盘的序列号,经常用来加密
DWORD dwMaximumComponentLength; // 硬盘允许最长的文件名是多长
DWORD dwFileSystemFlags; // 获取更多的关于盘的各种属性
WCHAR szFileSystemNameBuffer[BUFSIZ]; // 获取盘的文件系统是什么类型的
// 获取驱动器详细信息
if (!GetVolumeInformation(
szDrive,
szDriveName,
BUFSIZ,
&dwVolumeSerialNumber,
&dwMaximumComponentLength,
&dwFileSystemFlags,
szFileSystemNameBuffer,
BUFSIZ
)) {
return FALSE;
}
// 如果有卷标,将卷标显示
if (0 != lstrlen(szDriveName)) {
wprintf(L"\nDrive Name is %s\n", szDriveName);
}
// 打印硬盘序列号
printf("\n硬盘号是:%u", dwVolumeSerialNumber);
// 显示允许的文件名最大长度
printf("\n允许的文件名最大长度是:%u", dwMaximumComponentLength);
// 打印盘的文件系统类型
wprintf(L"\nfile system name: %ls\n", szFileSystemNameBuffer);
// 处理文件系统标志
if (dwFileSystemFlags & FILE_VOLUME_QUOTAS) {
// 该文件系统是否支持配额
printf("\n文件系统支持配额");
}
else {
printf("\n文件系统不支持配额");
}
// 是否支持加密
if (dwFileSystemFlags & FILE_SUPPORTS_ENCRYPTION) {
printf("\n文件系统支持加密");
}
else {
printf("\n文件系统不支持加密");
}
return TRUE;
}
int main() {
BOOL flag;
flag = GetDriverInfo(TEXT("E:\\"));
return flag;
}