Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как узнать свободное место на диске?

01.01.2007

В коде используется функция ExecCmdine из статьи: Как запустить консольное приложение и перехватить вывод?

function GetFreeSpace(Share:string):integer; {in Kb}
  var t:TstringList;
      i:integer;
      temp:string;
      mesure:char;
      multi:integer;
      f:real;
  function getbefore(substr, str:string):string;
  begin
    if pos(substr,str)>0 then result:=copy(str,1,pos(substr,str)-1)
    else result:='';
  end;
 
  function getafter(substr, str:string):string;
  begin
    if pos(substr,str)>0 then result:=copy(str,pos(substr,str)+length(substr),length(str))
    else result:='';
  end;
begin
  Result:=-1;
  t:=TstringList.Create;
  ExecCmdine('df -h', t);
  For i:=0 to t.Count-1 do
    if pos(Share, t[i])=1 then
      begin
        temp:=trim(GetAfter(Share, t[i]));
        temp:=trim(GetAfter(' ', temp));
        temp:=trim(GetAfter(' ', temp));
        temp:=trim(GetBefore(' ', temp));
        if temp='' then exit;
        mesure:=temp[length(temp)];
        Case mesure of
          'G','g':multi:=1024*1024;
          'M','m':multi:=1024;
          'K','k':multi:=1;
          else multi:=0;
        end;
        try
          f:=strtofloat(copy(temp,1,length(temp)-1));
        except
          f:=0;
        end;
        result:=Round(f*multi);
      end;
end;

Использование:

function GetFreeSpace('/dev/hda5')

Примечание

Под отладчиком Kylix код может не работать. Надо запускать приложение не под Kylix для того чтобы удостовериться что код работает.

Более подробную информацию можно получить запустив в консоле:

man df

Автор: Vit