GetDiskFreeSpaceEx

https://msdn.microsoft.com/ja-jp/library/cc428944.aspx https://msdn.microsoft.com/ja-jp/library/cc429129.aspx https://msdn.microsoft.com/ja-jp/library/cc429133.aspx https://msdn.microsoft.com/ja-jp/library/cc429129.aspx https://msdn.microsoft.com/ja-jp/library/cc429133.aspx

指定されたディスクの容量に関する情報を取得します。ディスク全体の容量、全体の空き容量、呼び出し側スレッドに関連するユーザーが利用できる空き容量を取得します。

BOOL GetDiskFreeSpaceEx(
  LPCTSTR lpDirectoryName,                 // ディレクトリ名
  PULARGE_INTEGER lpFreeBytesAvailable,    // 呼び出し側が利用できるバイト数
  PULARGE_INTEGER lpTotalNumberOfBytes,    // ディスク全体のバイト数
  PULARGE_INTEGER lpTotalNumberOfFreeBytes // ディスク全体の空きバイト数
);

パラメータ

lpDirectoryName
情報を取得するべきディスクのディレクトリ名を保持している、NULL で終わる文字列へのポインタを指定します。UNC 名を使うこともできます。UNC 名を指定する場合、最後に円記号(\)を付けてください。たとえば、\\MyServer\MyShare を調べたい場合、\\MyServer\MyShare\ という文字列を指定してください。

NULL を指定すると、カレントディレクトリのあるディスクが指定されたものと見なされます。

パラメータで、ディスクのルートディレクトリを指定する必要がないことに注意してください。この関数は、ディスク上の任意のディレクトリを受け付けます。

lpFreeBytesAvailable
ULARGE_INTEGER 型の 1 個の変数へのポインタを指定します。関数から制御が返ると、この構造体に、呼び出し側スレッドに関連するユーザーが利用できるディスクの空きバイト数が格納されます。

Windows 2000:ディスククォータが有効になっている場合、この値が、ディスク全体の空きバイト数より小さな値になることがあります。

lpTotalNumberOfBytes
ULARGE_INTEGER 型の 1 個の変数へのポインタを指定します。関数から制御が返ると、この構造体に、呼び出し側スレッドに関連するユーザーが利用できるディスクの総バイト数が格納されます。

Windows 2000:ディスククォータが有効になっている場合、この値が、ディスク全体のバイト数よりも小さな値になることがあります。

lpTotalNumberOfFreeBytes
ULARGE_INTEGER 型の 1 個の変数へのポインタを指定します。関数から制御が返ると、この構造体に、ディスクの空きバイト数が格納されます。

この情報が不要な場合、NULL を指定できます。

戻り値

関数が成功すると、0 以外の値が返ります。

関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

解説

この関数が取得するすべての値は、ULARGE_INTEGER 型、つまり 64 ビットです。32 ビットへの切り捨てを行わないよう注意してください。

Windows NT と Windows 2000:Windows 2000 も含め、Windows NT 4.0 以降では GetDiskFreeSpaceEx 関数が利用できます。この関数が利用できるかどうかを実行時に判断する方法については、この後の説明を参照してください。

Windows 95 OSR 2 と Windows 98:Windows 95 OSR 2(OEM Service Release 2)以降では、GetDiskFreeSpaceEx 関数が利用できます。

GetDiskFreeSpaceEx 関数が利用できるかどうかを実行時に判断するには、 関数を呼び出し、Kernel32.dll のハンドルを取得します。次に、 関数を呼び出します。

次のサンプルコードは、このような判断を行う 1 つの方法を示します。

pGetDiskFreeSpaceEx = GetProcAddress(GetModuleHandle("kernel32.dll"),

                         "GetDiskFreeSpaceExA");

if (pGetDiskFreeSpaceEx)

{

   fResult = pGetDiskFreeSpaceEx (pszDrive,

                (PULARGE_INTEGER)&i64FreeBytesToCaller,

                (PULARGE_INTEGER)&i64TotalBytes,

                (PULARGE_INTEGER)&i64FreeBytes);

// GetDiskFreeSpaceEx の結果を処理する。

}

else

{

   fResult = GetDiskFreeSpace (pszDrive,

                &dwSectPerClust,

                &dwBytesPerSect,

                &dwFreeClusters,

                &dwTotalClusters)

// GetDiskFreeSpace の結果を処理する。

}

Kernel32.dll に対して LoadLibrary 関数を呼び出す必要はありません。この DLL は、すべての Win32 プロセスのアドレス空間内に既にロードされているからです。

対応情報

Windows NT/2000:Windows NT 4.0 以降
Windows 95/98:Windows 95 OSR2 以降
ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Kernel32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装

参照

GetDiskFreeSpace, ,

表示: