_getdiskfree
Utiliza la información sobre una unidad de disco para rellenar una estructura de _diskfree_t.
Importante |
---|
Esta API no se puede utilizar en las aplicaciones que se ejecutan en Windows en tiempo de ejecución.Para obtener más información, vea Funciones CRT no compatibles con /ZW. |
unsigned _getdiskfree(
unsigned drive,
struct _diskfree_t * driveinfo
);
Parámetros
[in] drive
La unidad de disco para la que desee obtener información.[out] driveinfo
Una estructura de _diskfree_t que se rellena con la información de la unidad.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es cero.Si se produce un error en la función, el valor devuelto es el código de error.El valor errno se establece para cualquier error que es devuelto por el sistema operativo.Para obtener más información sobre las condiciones de error que se indican en errno, vea constantes de errno.
Comentarios
La estructura de _diskfree_t se define en Direct.h.
struct _diskfree_t {
unsigned total_clusters;
unsigned avail_clusters;
unsigned sectors_per_cluster;
unsigned bytes_per_sector;
};
Esta función valida sus parámetros.Si el puntero de driveinfo es NULL o drive especifica una unidad no válida, esta función invoca un controlador no válido de parámetro, tal y como se describe en Validación de parámetros.Si la ejecución puede continuar, la función devuelve EINVAL y establece errno a EINVAL.Las unidades válidas se extienden desde 0 a 26.Un valor de drive de 0 especifica la unidad actual; después, los números se asignan a las letras del alfabeto inglés que tales que 1 indica la unidad A, 3 indican la unidad C, y así sucesivamente.
total_clusters
El número total de clústeres, utilizados y disponible, en el disco.avail_clusters
El número de clústeres no usados en el disco.sectors_per_cluster
El número de sectores en cada clúster.bytes_per_sector
El tamaño de cada sector en bytes.
Requisitos
Rutina |
Encabezado necesario |
---|---|
_getdiskfree |
<direct.h> |
Para obtener más información de compatibilidad, vea Compatibilidad.
Ejemplo
// crt_getdiskfree.c
// compile with: /c
#include <windows.h>
#include <direct.h>
#include <stdio.h>
#include <tchar.h>
TCHAR g_szBorder[] = _T("======================================================================\n");
TCHAR g_szTitle1[] = _T("|DRIVE|TOTAL CLUSTERS|AVAIL CLUSTERS|SECTORS / CLUSTER|BYTES / SECTOR|\n");
TCHAR g_szTitle2[] = _T("|=====|==============|==============|=================|==============|\n");
TCHAR g_szLine[] = _T("| A: | | | | |\n");
void utoiRightJustified(TCHAR* szLeft, TCHAR* szRight, unsigned uVal);
int main(int argc, char* argv[]) {
TCHAR szMsg[4200];
struct _diskfree_t df = {0};
ULONG uDriveMask = _getdrives();
unsigned uErr, uLen, uDrive;
printf(g_szBorder);
printf(g_szTitle1);
printf(g_szTitle2);
for (uDrive=1; uDrive<=26; ++uDrive) {
if (uDriveMask & 1) {
uErr = _getdiskfree(uDrive, &df);
memcpy(szMsg, g_szLine, sizeof(g_szLine));
szMsg[3] = uDrive + 'A' - 1;
if (uErr == 0) {
utoiRightJustified(szMsg+8, szMsg+19, df.total_clusters);
utoiRightJustified(szMsg+23, szMsg+34, df.avail_clusters);
utoiRightJustified(szMsg+38, szMsg+52, df.sectors_per_cluster);
utoiRightJustified(szMsg+56, szMsg+67, df.bytes_per_sector);
}
else {
uLen = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,
uErr, 0, szMsg+8, 4100, NULL);
szMsg[uLen+6] = ' ';
szMsg[uLen+7] = ' ';
szMsg[uLen+8] = ' ';
}
printf(szMsg);
}
uDriveMask >>= 1;
}
printf(g_szBorder);
}
void utoiRightJustified(TCHAR* szLeft, TCHAR* szRight, unsigned uVal) {
TCHAR* szCur = szRight;
int nComma = 0;
if (uVal) {
while (uVal && (szCur >= szLeft)) {
if (nComma == 3) {
*szCur = ',';
nComma = 0;
}
else {
*szCur = (uVal % 10) | 0x30;
uVal /= 10;
++nComma;
}
--szCur;
}
}
else {
*szCur = '0';
--szCur;
}
if (uVal) {
szCur = szLeft;
while (szCur <= szRight) {
*szCur = '*';
++szCur;
}
}
}
Equivalente en .NET Framework
No es aplicable Para llamar a la función estándar de C, utilice PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.