磁盘操作API

驱动器操作相关的关键API

API 功能介绍
GetLogicalDrives 获取所有逻辑驱动器,并以Bitmap形式返回
GetLogicalDriveStrings 获取所有逻辑驱动器,并以字符串形式返回
FindFirstVolume 查找第一个驱动器,返回查找句柄
FindNextVolume 根据驱动器句柄查找其后继的逻辑驱动器
FindVolumeClose 关闭驱动器查找句柄
GetDriveType 获取驱动器的类型
GetVolumeInformation 获取驱动器的信息
FindFirstVolumeMountPoint 查找指定卷的第一个挂载点,并会查找句柄
FindNextVolumeMountPoint 根据挂载点句柄查找其后继的挂载点
SetVolumeMountPoint 将指定卷挂载到指定的挂载点处
GetDiskFreeSpace 获取磁盘的空间信息
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
#include <Windows.h>
#include <tchar.h>
#include <locale.h>
#define MAX_PATH 100

int main() {
TCHAR szName[MAX_PATH] = {};
UINT 每簇的扇区数量 = 0, 每个扇区的容量 = 0, 空闲簇的总量 = 0, 全部簇的总量 = 0;
UINT uDriveType = 0;

//设置语言的函数
_tsetlocale(LC_ALL, _T("chs"));

//获取驱动器信息
GetLogicalDriveStrings(MAX_PATH, szName);

_tprintf(_T("驱动器类型\t盘符\t总空间\t\t可用空间\t已用空间\n"));

for (int i = 0; szName[i] != '\0' && i < MAX_PATH; i++) {

/*OutputDebugString(&szName[i]);
OutputDebugString(_T("\n"));*/

//驱动器类型
uDriveType = GetDriveType(szName);
switch (uDriveType) {
case DRIVE_FIXED:
_tprintf(_T("不可移除驱动器"));
break;
case DRIVE_CDROM:
_tprintf(_T("CD-ROM驱动器"));
break;
case DRIVE_REMOTE:
_tprintf(_T("网络驱动器"));
break;
case DRIVE_REMOVABLE:
_tprintf(_T("可移动介质驱动器"));
break;
case DRIVE_UNKNOWN:
_tprintf(_T("未知"));
break;
}

//获取磁盘存储信息
GetDiskFreeSpace(
&szName[i],
(LPDWORD)&每簇的扇区数量,
(LPDWORD)&每个扇区的容量,
(LPDWORD)&空闲簇的总量,
(LPDWORD)&全部簇的总量
);
_tprintf(_T("\t%s\t"), &szName[i]);
_tprintf(_T("%lf GB\t"), (每簇的扇区数量 / 1024.0*每个扇区的容量*全部簇的总量) / 1024 / 1024);
_tprintf(_T("%lf GB\t"), (每簇的扇区数量 / 1024.0*每个扇区的容量*空闲簇的总量) / 1024 / 1024);
_tprintf(_T("%lf GB\t"), ((每簇的扇区数量 / 1024.0*每个扇区的容量*全部簇的总量) / 1024 / 1024) -
((每簇的扇区数量 / 1024.0*每个扇区的容量*空闲簇的总量) / 1024 / 1024));

_tprintf(_T("\n"));

i += _tcslen(&szName[i]);
}

system("pause");
return 0;
}