C/C++ Windows API——获取磁盘信息
【摘要】
// LogicalDrive.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#in...
// LogicalDrive.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
//将PULARGE_INTEGER类型的字节(B)数转化为(GB)单位
#define GB(x) (x.HighPart << 2) + (x.LowPart >> 20) / 1024.0
int main()
{
int driveCount = 0;
char szDriveInfo[16 + 1] = {0};
/*
获取主机中所有的逻辑驱动器字母,以BitMap的形式返回
DWORD GetLogicalDrives();
return 一个DWORD类型的值,第一位表示所对应的驱动器是否存在。一般情况下DWORD的数据长度是32位,在这个DWORD中,每一位对应了一个逻辑驱动器是否存在。第二位如果是“1”则表示驱动器“B:”存在,第四位如果是“1”则表示驱动器“D:”存在,以此类推
*/
DWORD driveInfo = GetLogicalDrives();
_itoa_s(driveInfo, szDriveInfo, 2);
printf("GetLogicalDrives -> %016s\n", szDriveInfo);
while (driveInfo) {
if (driveInfo & 1) {
driveCount++;
}
driveInfo >>= 1;
}
printf("LogicalDriveCount = %d\n", driveCount);
/*
获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径。
DWORD GetLogicalDriveStrings(
DWORD nBufferLength, // size of buffer, 如果是此参数为0 后面的lpBuffer则不使用
LPTSTR lpBuffer // drive strings buffer, 用于装载逻辑驱动器名称的字串。每个名字都用一个NULL字符分隔,在最后一个名字后面用两个NULL表示中止(空中止) 例如A:\<null>C:\<null><null>
);
return
返回填充完毕的缓冲区字符的的个数..不是长度..char和TCHAR 返回数目都是一样的..
一般是4的倍数...(形如C:\ 包括之后的一个空字符0)..
如果缓冲区不够大,则返回值大于nBufferLength
如果失败..函数返回0..若想获得更多的错误信息,请使用GetLastError函数
*/
int driveStrLen = GetLogicalDriveStrings(0, NULL);
printf("GetLogicalDriveStrings -> %d\n\n", driveStrLen);
//exception must have a constant value
//char driveStr[driveStrLen];
TCHAR *driveStr = new TCHAR[driveStrLen];
GetLogicalDriveStrings(driveStrLen, driveStr);
TCHAR *lpDriveStr = driveStr;
for (int i = 0; i < driveCount; i++) {
/*
获取磁盘类型
UINT GetDriveType(
_In_opt_ LPCWSTR lpRootPathName //不包括卷名的磁盘根路径名
);
#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
*/
UINT driveType = GetDriveType(lpDriveStr);
char *szDriveTypeArr[] = {
"DRIVE_UNKNOWN",
"DRIVE_NO_ROOT_DIR",
"DRIVE_REMOVABLE",
"DRIVE_FIXED",
"DRIVE_REMOTE",
"DRIVE_CDROM",
"DRIVE_RAMDISK"
};
ULARGE_INTEGER freeBytesAvailableToCaller;
ULARGE_INTEGER totalNumberOfBytes;
ULARGE_INTEGER totalNumberOfFreeBytes;
/*
获取与一个磁盘的类型以及剩余空间容量有关的信息
BOOL GetDiskFreeSpaceExW(
_In_opt_ LPCWSTR lpDirectoryName, //不包括卷名的磁盘根路径名
_Out_opt_ PULARGE_INTEGER lpFreeBytesAvailableToCaller, //磁盘的可用字节数
_Out_opt_ PULARGE_INTEGER lpTotalNumberOfBytes, //磁盘的总字节数
_Out_opt_ PULARGE_INTEGER lpTotalNumberOfFreeBytes //磁盘的剩余字节数
);
*/
GetDiskFreeSpaceEx(lpDriveStr, &freeBytesAvailableToCaller, &totalNumberOfBytes, &totalNumberOfFreeBytes);
printf("GetLogicalDriveStrings -> %ls\n", lpDriveStr);
printf("GetDriveType -> %d=%s\n", driveType, szDriveTypeArr[driveType]);
printf("GetDiskFreeSpaceEx -> Available=%f, Total=%f, free=%f\n\n", GB(freeBytesAvailableToCaller), GB(totalNumberOfBytes), GB(totalNumberOfFreeBytes));
lpDriveStr += 4;
}
delete driveStr;
system("pause");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
文章来源: blog.csdn.net,作者:福州-司马懿,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/chy555chy/article/details/52820125
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)