C/C++ Windows API——获取磁盘信息

网友投稿 921 2022-05-28

// LogicalDrive.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include //将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:\C:\ ); 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

C/C++ Windows API——获取磁盘信息

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

API C++ Windows

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:7.磁盘基本概念
下一篇:基于Java Swing的仪表盘实现
相关文章