最終更新 2003 10/15
サンプルのダウンロード → API_GetDiskFreeSpace.lzh(38k)
全ソースコード
GetDiskFreeSpaceEx 関数
対応しているバージョン
95 OSR2 以降, 98, Me, NT4.0以降, 2000, XP
使用するヘッダとライブラリ
winbase.h
kernel32.lib
GetDiskFreeSpace 関数
対応しているバージョン
95, 98, Me, NT3.1以降, 2000, XP
使用するヘッダとライブラリ
winbase.h
kernel32.lib
|
ディスクの全容量、空き容量を調べるには GetDiskFreeSpace() 関数
もしくは GetDiskFreeSpaceEx() 関数を使います。
GetDiskFreeSpace() 関数では約4Gバイトまでの容量しか調べることが
できないので、それより大きい容量を調べるには GetDiskFreeSpaceEx()
関数を使用します。
ところが、GetDiskFreeSpaceEx() 関数はウィンドウズ95のOSR2
以降でないと利用することができません。
MSDNライブラリを見ると、最初に GetVersionEx() 関数でウィンドウズの
バージョンを調べて、GetDiskFreeSpace() と GetDiskFreeSpaceEx() を
使い分けうんぬん・・・と書かれているのですが、GetDiskFreeSpaceEx()
関数の戻り値が FALSE だったら GetDiskFreeSpace() 関数を使うという方法で
十分だと思います。
ディスクの容量が大きくなると、32ビット型の変数では入りきらないので
64ビット型の変数を使います。
サンプルでは ULONGLONG ( unsigned __int64 ) 型の変数にディスクの容量を
格納しています。
厄介なのは、ディスクの容量を文字として表示する時です。
数値を文字に変換して表示するには sprintf() や wsprintf() 関数を
使いますがこの関数は変換する数値には int を使っているので、一般的な
ウィンドウズマシンでは32ビットの数値までしか対応できません。
(しかも符号付き)
64ビットの数値を表示するには、サンプルのように64ビットの数値を
大き目の数字で割ったり余りを求めたりして分割しないといけません。
符号あり、なしの64ビットの数値を文字列に変換できるような関数を
自分で作った方がいいかも知れません。
そういうAPI関数ってないんですかねぇ・・・。
|