_getdiskfree
如需填入 _diskfree_t 結構的驅動程式使用的資訊。
重要事項 |
---|
這個應用程式開發介面無法用來在 Windows 執行階段中執行的應用程式。如需詳細資訊,請參閱 CRT 函式不支援使用 /ZW。 |
unsigned _getdiskfree(
unsigned drive,
struct _diskfree_t * driveinfo
);
參數
[in] drive
所需資訊的驅動程式。[out] driveinfo
將填入與磁碟機有關的資訊的 _diskfree_t 結構。
傳回值
如果函式成功,則傳回值為零。如果函式失敗,則傳回值為錯誤碼。errno 值為由作業系統傳回的錯誤設定。如需由 errno表示的錯誤條件的詳細資訊,請參閱 errno 常數。
備註
_diskfree_t 結構。Direct.h 定義。
struct _diskfree_t {
unsigned total_clusters;
unsigned avail_clusters;
unsigned sectors_per_cluster;
unsigned bytes_per_sector;
};
這個函式會驗證其參數。如果 driveinfo 指標是 NULL 或 drive 指定了無效的磁碟機,這個函式叫用無效的參數處理常式,如 參數驗證中所述。如果允許繼續執行,此函式回傳 EINVAL 並設置 errno 為 EINVAL 。有效巡覽從 0 到 26。drive 值為 0 表示目前磁碟機;在之後,則會對應至英文字母的字母這類 1 表示巡覽 A, 3 表示 C 磁碟機,依此類推。
total_clusters
叢集總數,使用和可用,在磁碟上。avail_clusters
未使用的叢集數目在磁碟上。sectors_per_cluster
磁碟區數個叢集的。bytes_per_sector
每一個磁碟區的大小 (以位元組為單位)。
需求
程序 |
必要的標頭檔 |
---|---|
_getdiskfree |
<direct.h> |
如需相容性詳細資訊,請參閱 相容性。
範例
// 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 對等用法
不適用。若要呼叫標準 C 函式,請使用 PInvoke。如需詳細資訊,請參閱平台叫用範例。