_getdiskfree
获取有关磁盘驱动器的信息,例如群集总数、可用群集、每个群集的扇区数以及每个扇区的字节数。
重要
此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数。
语法
unsigned _getdiskfree(
unsigned drive,
struct _diskfree_t * driveinfo
);
参数
drive
您需要了解其信息的磁盘驱动器。
driveinfo
将使用有关驱动器的信息进行填充的 _diskfree_t
结构。
返回值
如果函数成功,则返回值为 0。 如果函数失败,则返回值为错误代码。 可以为操作系统返回的任何错误设置 errno
值。 有关由 errno
指示的错误条件的详细信息,请参阅 errno
常量。
备注
_diskfree_t
结构在 Direct.h 中定义。
struct _diskfree_t {
unsigned total_clusters; // The total number of clusters, both used and available, on the disk.
unsigned avail_clusters; // The number of unused clusters on the disk.
unsigned sectors_per_cluster; // The number of sectors in each cluster.
unsigned bytes_per_sector; // The size of each sector in bytes.
};
此函数验证其参数。 如果 driveinfo
指针为 NULL
或者 drive
指定无效的驱动器,则此函数将调用无效参数处理程序,如参数验证中所述。 如果允许继续执行,则函数将返回 EINVAL
,并且将 errno
设置为 EINVAL
。 有效驱动器值范围为 0 到 26。 drive
值 0 指定当前的驱动器;之后,数字映射到英语字母表中的字母,例如 1 表示驱动器 A,3 表示驱动器 C,依此类推。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
例程 | 必需的标头 |
---|---|
_getdiskfree |
<direct.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
// crt_getdiskfree.c
// compile with: /c
#include <windows.h>
#include <direct.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
ULONG uDriveMask = _getdrives();
for (unsigned uDrive = 1; uDrive <= 26; ++uDrive)
{
if (uDriveMask & 1)
{
struct _diskfree_t df = { 0 };
unsigned uErr = _getdiskfree(uDrive, &df);
printf("\nDrive: %c\n", uDrive + 'A' - 1);
if (uErr == 0)
{
printf("\tTotal clusters: %11u\n", df.total_clusters);
printf("\tAvailable clusters: %11u\n", df.avail_clusters);
printf("\tSectors per cluster: %11u\n", df.sectors_per_cluster);
printf("\tBytes per sector: %11u\n", df.bytes_per_sector);
}
else
{
WCHAR errMsg[80];
unsigned uLen = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,
uErr, 0, errMsg, sizeof(errMsg), NULL);
printf("%S\n", errMsg);
}
}
uDriveMask >>= 1;
}
}
Drive: C
Total clusters: 249754111
Available clusters: 160184686
Sectors per cluster: 8
Bytes per sector: 512