Exportar (0) Imprimir
Expandir todo
div
EOF
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

_getdiskfree

Utiliza la información sobre una unidad de disco para rellenar una estructura de _diskfree_t.

Nota importante 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
);

[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.

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.

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.

Rutina

Encabezado necesario

_getdiskfree

<direct.h>

Para obtener más información de compatibilidad, vea Compatibilidad.

// 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;
      }
   }
}
====================================================================== |UNIDAD|CLÚSTERES DE TOTAL|CLÚSTERES DE RESULTADO|SECTORES/CLÚSTER|BYTES/SECTOR| |=====|==============|==============|=================|==============| | A: | El dispositivo no está listo.  | | | | C: | 4.721.093 | 3.778.303 | 8 | 512 | | D: | 1.956.097 | 1.800.761 | 8 | 512 | | E: | El dispositivo no está listo.  | | | ====================================================================== 

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.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft