ドライブの空き容量を取得するには?

解決


モンテネグロ  2004-03-16 23:05:49  No: 7687

みなさんの知恵をお貸しください。よろしくお願いします。
ドライブコンボボックスで選択したドライブの空き容量を、
取得したいと考えているのですが、DiskFreeを使ってスマートに
表現できないでしょうか?


おおさわ  URL  2004-03-16 23:57:32  No: 7688

こんにちは。
フォーム上に
  ・DriveComboBox1(TDriveComboBox)
  ・Label1(TLabel1)
を配置して、下記のようにソースを組むのは如何でしょう。
Size が、ドライブの空き容量になります。
Integer 型だと 2GB までしか取得できませんが、
Extended 型だと正常取得できます。
1024 より大きい限りは 1024 で割っていくことで、単位をあわせています。
DiskFree で -1 が出力されるとドライブは存在しないので、その表示もしています。

単位を定義している場所の'TB'は、ちょっとした洒落のつもりです。
でも、10年後は洒落じゃなくなっているのでしょうね…。

procedure TForm1.DriveComboBox1Change(Sender: TObject);
var
  Size      : Extended;
  Fig       : string;
  FigList   : array[0..4] of string;

  i : Integer;
begin
  //空き容量取得
  Size:= DiskFree(Ord(DriveComboBox1.Drive)-64);

  //単位定義
  FigList[0]:='Byte';
  FigList[1]:='KB';
  FigList[2]:='MB';
  FigList[3]:='GB'; 
  FigList[4]:='TB';

  //単位変換
  i:=0;
  while (Size>=1024) and (i<=4) do
  begin
    Size:= Size / 1024;
    Inc(i);
  end;
  Fig:= FigList[i];

  //ラベルに表示
  if Size>=0 then
    Label1.Caption:= Format('%4.1f %s',[Size, Fig])
  else if Size=-1 then
    Label1.Caption:= 'Error: Drive is not found.'
  else
    Label1.Caption:= 'Error: ???';
end;


モンテネグロ  2004-03-17 00:26:27  No: 7689

おおさわさんありがとうございます。
非常にわかりやすく、ソースまで組んでいただき感謝しています。
これを参考にしてやってみます。
本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加