_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

另请参阅

目录控制