Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Определение места


Автор: W_A_K_E 1.2.2005, 18:32
Подскажите плиз как можно определить обьем и свободное или занятое место на харде и чтобы отображалось например вот так
обьем: 80,0 Гб
Свободно: 30.6 Гб
Занято: 49.4 Гб
Я использую вот такую функцию но как мне её доработать подскажите плиз

Код


function GetDiskSize(drive: Char; var free_size, total_size: Int64): Boolean;
var
  RootPath: array[0..4] of Char;
  RootPtr: PChar;
  current_dir: string;
begin
  RootPath[0] := Drive;
  RootPath[1] := ':';
  RootPath[2] := '\';
  RootPath[3] := #0;
  RootPtr := RootPath;
  current_dir := GetCurrentDir;
  if SetCurrentDir(drive + ':\') then
  begin
    GetDiskFreeSpaceEx(RootPtr, Free_size, Total_size, nil);
    // this to turn back to original dir
   SetCurrentDir(current_dir);
    Result := True;
  end
  else
  begin
    Result := False;
    Free_size  := -1;
    Total_size := -1;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  free_size, total_size: Int64;
begin
  if GetDiskSize(DriveComboBox1.Drive, free_size, total_size) then begin
      Label1.Caption:=FloatToStr((free_size div 1073741824))+' Гб';
      Label2.Caption:=FloatToStr(total_size div 1073741824)+' Гб';
      Label3.Caption:=FloatToStr((total_size-free_size) div 1073741824)+' Гб' end
  else
    ShowMessage('No disk in drive!');
end;

Заранее благодарен



Автор: Vit 1.2.2005, 19:54
Стандартные дельфийские функции


DiskFree(Drive: Byte): Int64;
function DiskSize(Drive: Byte): Int64;

А в чём должны заключаться доработки?

Автор: W_A_K_E 1.2.2005, 20:26
Цитата(W_A_K_E @ 1.2.2005, 18:32)
  if GetDiskSize(DriveComboBox1.Drive, free_size, total_size) then begin
      Label1.Caption:=FloatToStr((free_size div 1073741824))+' Гб';
      Label2.Caption:=FloatToStr(total_size div 1073741824)+' Гб';
      Label3.Caption:=FloatToStr((total_size-free_size) div 1073741824)+' Гб' end
  else
    ShowMessage('No disk in drive!');


Вот тут надо доработать так чтобы в строках Label1-Label3 показывало не целое число, а с остатком
у меня он округляет и пишет в label1 12 Гб а надо чтоб с остатком например 12,1 Гб (Ну как в свойствах диска C:)

Там просто нужно видимо выполнить некоторые математические операции

Автор: Vit 1.2.2005, 20:37
Код

Label1.Caption:=Format('Свободно %f Gb', [free_size/1073741824]);


Подробнее смотри Help по функции Format - там много интересного...

Автор: W_A_K_E 1.2.2005, 21:17
Vit Большое тебе спасибо за помощь, а help я обязательно прочитаю... Еще раз пасиба

Автор: W_A_K_E 2.2.2005, 11:09
Кстати Vit ты не знаешь где можно скачать русифицированую справку под делфи 7?

Автор: z-END 2.2.2005, 12:11
Код

function ByteToStr(X:Int64):String;
var
St: String;
fx: Real;
Step: Integer;
begin
Fx:=x; Step:=0;
while Fx>999 do
begin
 Fx:=Fx/1024;
 Inc(Step);
end;
if Step > 0
then str(fx:4:2,St)
else St:=IntToStr(X);
case Step of
0: Result:=StringReplace(St,'.',',',[rfReplaceAll])+' байт';
1: Result:=StringReplace(St,'.',',',[rfReplaceAll])+' Кб';
2: Result:=StringReplace(St,'.',',',[rfReplaceAll])+' Мб';
3: Result:=StringReplace(St,'.',',',[rfReplaceAll])+' Гб';
else Result:= StringReplace(St,'.',',',[rfReplaceAll])+' Тб';
end;
end;

Автор: Vit 2.2.2005, 20:52
Цитата(W_A_K_E @ 2.2.2005, 02:09)
Кстати Vit ты не знаешь где можно скачать русифицированую справку под делфи 7?



Знаю, называется "учебник английского языка" - есть в любом магазине

Автор: W_A_K_E 2.2.2005, 22:49
Цитата(Vit @ 2.2.2005, 20:52)
Знаю, называется "учебник английского языка" - есть в любом магазине

smile
У меня был когда то, пока у меня хард не полетел я скачивал с местного сервака а щас немогу потому что я немного поиздевался над ним smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)