Как узнать свободное место на диске?
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