_getdiskfree

Получение сведений о диске, таких как общее количество кластеров, доступных кластеров, секторов для каждого кластера и байтов в каждом секторе.

Важно!

Этот API нельзя использовать в приложениях, выполняемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.

Синтаксис

unsigned _getdiskfree(
   unsigned drive,
   struct _diskfree_t * driveinfo
);

Параметры

drive
Диск, для которого требуются сведения.

driveinfo
Структура _diskfree_t, которая будет заполнена сведениями о диске.

Возвращаемое значение

Если вызов функции заканчивается удачно, возвращается нулевое значение. Если функция завершается с ошибкой, возвращается значение кода ошибки. Значение параметра errno задается для всех ошибок, возвращаемых операционной системой. Дополнительные сведения об условиях ошибки, указанных в errnoerrno константах.

Замечания

Структура _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 указывает на диск А, 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

См. также

Элемент управления каталогом