_getdiskfree
Informationen über ein Laufwerk, um eine Struktur _diskfree_t aufzufüllen.
Wichtig
Diese API kann nicht in Anwendungen verwendet werden, die im Windows-Runtime ausgeführt werden.Weitere Informationen finden Sie unter CRT-Funktionen nicht mit /ZW unterstützt.
unsigned _getdiskfree(
unsigned drive,
struct _diskfree_t * driveinfo
);
Parameter
[in] drive
Das Laufwerk, für das Sie Informationen wünschen.[out] driveinfo
Eine _diskfree_t-Struktur, die mit Informationen über das Laufwerk aufgefüllt wird.
Rückgabewert
Wenn die Funktion erfolgreich, der Rückgabewert ist null. Wenn die Funktion fehlschlägt, ist der Rückgabewert der Fehlercode. Der Wert errno wird für alle Fehler festgelegt, die das Betriebssystem zurückgegeben werden. Weitere Informationen über Fehlerzustände, die von errno angegeben werden, finden Sie unter errno-Konstanten.
Hinweise
Die _diskfree_t-Struktur wird in Direct.h definiert.
struct _diskfree_t {
unsigned total_clusters;
unsigned avail_clusters;
unsigned sectors_per_cluster;
unsigned bytes_per_sector;
};
Diese Funktion überprüft ihre Parameter. Wenn der Zeiger driveinfoNULL ist, oder drive einem ungültigen Laufwerk angibt, Aufrufe dieser Funktion ein ungültiger Parameterhandler, wie in Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, gibt die Funktion EINVAL zurück und setzt errno auf EINVAL. Gültiger Laufwerksbereich von 0 bis 26. Ein drive-Wert von 0 gibt den aktuellen Laufwerk an; Danach gibt Zahlenzuordnung den Buchstaben des Alphabets englischen so, dass 1 Laufwerk A angibt, 3 Laufwerk C, z. B. an.
total_clusters
Die Gesamtzahl von Clustern, verwendet und verfügbar, auf dem Datenträger.avail_clusters
Die Anzahl nicht verwendeter Clustern auf dem Datenträger.sectors_per_cluster
Die Anzahl der Fensterbereiche in einem Cluster.bytes_per_sector
Die Größe eines Bereichs in Bytes.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
_getdiskfree |
<direct.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// 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;
}
}
}
.NET Framework-Entsprechung
Nicht zutreffend. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.