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

网友投稿 1033 2025-03-31

// 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

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

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

API C++ Windows

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

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

上一篇:自己建一个在线文档(自己搭建在线文档
下一篇:如何插入一个目录(怎样在目录里面添加一个)
相关文章