_getdiskfree
Получение сведений о диске, таких как общее количество кластеров, доступных кластеров, секторов для каждого кластера и байтов в каждом секторе.
Внимание
Этот API нельзя использовать в приложениях, выполняемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
unsigned _getdiskfree(
unsigned drive,
struct _diskfree_t * driveinfo
);
Параметры
drive
Диск, для которого требуются сведения.
driveinfo
Структура _diskfree_t
, которая будет заполнена сведениями о диске.
Возвращаемое значение
Если вызов функции заканчивается удачно, возвращается нулевое значение. Если функция завершается с ошибкой, возвращается значение кода ошибки. Значение параметра 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 указывает на диск А, 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