_getdiskfree
Verwendungsinformationen über ein Laufwerk, um eine _diskfree_t-Struktur aufzufüllen.
Wichtig |
---|
Diese API kann nicht in den Anwendungen verwendet werden, die in Windows-Runtime ausführen.Weitere Informationen finden Sie unter CRT-Funktionen unterstützt nicht mit /ZW. |
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 folgt, ist der Rückgabewert 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 Fehlerbedingungen, 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 seine Parameter.Wenn der driveinfo Zeiger NULL ist, oder drive ein ungültiges Laufwerk angibt, Aufrufe dieser Funktion ein ungültiger Parameterhandler, wie in Parametervalidierung beschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, gibt die Funktion EINVAL zurück und legt errno zu EINVAL fest.Gültiges Laufwerk reicht von 0 bis 26.Ein drive-Wert 0 gibt das aktuelle Laufwerk an; danach gibt Zahlenzuordnung zu den Buchstaben des englischen alphabetischen so, dass 1 Laufwerk A angibt, 3 Laufwerk C, usw. an.
total_clusters
Die Gesamtanzahl von Clustern, verwendet und verfügbar, auf dem Datenträger.avail_clusters
Die Anzahl von nicht verwendeten Clustern auf dem Datenträger.sectors_per_cluster
Die Anzahl von Bereichen in jedem Cluster.bytes_per_sector
Die Größe jedes Bereichs in Bytes.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
_getdiskfree |
<direct.h> |
Weitere Kompatibilitätsinformation 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. Um die Standard-C-Funktion aufzurufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.