Retornar o Tamanho do HD

Delphi

02/12/2003

Alguém sabe como retornar o tamanho [b:7b25e307d9]total [/b:7b25e307d9]e [b:7b25e307d9]livre [/b:7b25e307d9]do HD?

valeu


Adriano Santos

Adriano Santos

Curtidas 0

Respostas

Deus

Deus

02/12/2003

Eis aqui uma função que vai te dar uma força.. dando mais do que você pediu! ;)

  function PegaDados(Drive: String; iDado: Integer): Variant;
  var
      fulldrive         :string[3];
      tmp_drive         :array[0..2] of char;
      Tmp_SectorsPerCluster,
      Tmp_BytesPerSector,
      Tmp_FreeClusters,
      Tmp_Clusters      :DWORD;
      VolName           :array[0..255] of Char;
      SerialNumber      :DWORD;
      MaxCLength        :DWORD;
      FileSysFlag       :DWORD;
      FileSysName       :array[0..255] of Char;
  begin
    fulldrive := Drive + ´:\´;
    StrPCopy(tmp_drive, fulldrive);

    try
      GetDiskFreeSpace(tmp_drive, Tmp_SectorsPerCluster, Tmp_BytesPerSector,
                              tmp_FreeClusters, Tmp_Clusters)
    except
    end;

    GetVolumeInformation(tmp_drive, VolName, 255, @SerialNumber, MaxCLength,
       FileSysFlag, FileSysName, 255);

(*  Possibilidades de iDado:

    0 - Setores por Cluster;
    1 - Bytes por Setor;
    2 - Clusters Livres;
    3 - Quantidade de Clusters;
    4 - Espaço Livre em Disco;
    5 - Espaço Total em Disco;
    6 - Nome do Volume;
    7 - Número de Série do Disco; *)

    Case iDado of
      0: Result := Tmp_SectorsPerCluster;
      1: Result := Tmp_BytesPerSector;
      2: Result := Tmp_FreeClusters;
      3: Result := Tmp_Clusters;
      4: Result := Tmp_FreeClusters * Tmp_BytesPerSector * Tmp_SectorsPerCluster;
      5: Result := Tmp_Clusters * Tmp_BytesPerSector * Tmp_SectorsPerCluster;
      6: Result := String(VolName);
      7: Result := IntToHex(SerialNumber, 8);
    end;
  end;


Para executá-la, é fácil. Digamos que você quer saber o tamanho total do drive C. Para isso, você usa uma variável do tipo REAL (não Integer), e faz:

variavel := PegaDados(´C´, 4);


O valor que vai no segundo parâmetro (iDados) está explicitado dentro do código. Ele pode assumir valores de 0 até 7, e cada valor q vc colocar pra iDados retorna uma coisa diferente. Suponha, por exemplo, que você quer o nome do drive C. Para isso, você cria uma variável String e faz:

variavel := PegaDados(´C´, 7);


Fácil, não? Espero que tenha ajudado!! :) Abraços, dEUS


GOSTEI 0
Adriano Santos

Adriano Santos

02/12/2003

Eu acabei usando DiskFree e DiskSize, mais fácil ainda...

valeu


GOSTEI 0
POSTAR