Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Espacio del disco duro (https://www.clubdelphi.com/foros/showthread.php?t=92414)

SaraTorres 24-10-2017 20:08:13

Espacio del disco duro
 
Hola chicos
Con qué código puedo obtener el espacio usado y espacio libre del disco C:\ pero en Gb?

Si alguien lo tiene y por favor me lo comparte, se lo agradezco desde ya.
Cuídence :)

Casimiro Notevi 24-10-2017 20:25:20

https://www.clubdelphi.com/foros/showthread.php?t=49476

ecfisa 24-10-2017 21:19:18

Hola.

Otra opción es usar la función API GetDiskFreeSpaceEx.

Código Delphi [-]
...
procedure GetDiskInfoSpace( Disk: string; var TotalBytes, FreeBytes: Int64 );
const
  GB = 1024*1024*1024;
begin
  Disk := IncludeTrailingPathDelimiter(Disk);
  if not GetDiskFreeSpaceEx(PChar(Disk), FreeBytes, TotalBytes, nil) then
    raise Exception.Create( SysErrorMessage(GetLastError));
  TotalBytes := TotalBytes div GB;
  FreeBytes  := FreeBytes div GB;
end;

Ejemplo de uso:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  FreeBytes,
  TotalBytes: Int64;
begin
  GetDiskInfoSpace('C:\', TotalBytes, FreeBytes);
  ShowMessageFmt('Capacidad: %d Gb. %sEspacio libre: %d Gb.', [  TotalBytes, #$A, FreeBytes  ]);
end;

Saludos :)

SaraTorres 26-10-2017 06:40:00

Hola ecfisa :)
Estuve probando el código y funcionó a la perfección.

Ahora, el resultado me lo da en enteros pero ¿cómo puedo hacerlo que me de con decimales el espacio libre?
Ejemplo de espacio libre: 33,5 GB

Gracias por tu tiempo.

Casimiro Notevi 26-10-2017 10:52:50

http://www.delphibasics.co.uk/RTL.as...ShowMessageFmt

ecfisa 26-10-2017 14:52:58

Hola.
Cita:

Empezado por SaraTorres (Mensaje 522022)
...Ahora, el resultado me lo da en enteros pero ¿cómo puedo hacerlo que me de con decimales el espacio libre?...

En ese caso vas a tener que cambiar el tipo de los parámetros:
Código Delphi [-]
procedure GetDiskInfoSpace( Disk: string; var prFreeBytesAvailable,
  prTotalNumberOfBytes, prTotalNumberOfFreeBytes: Double );
const
  GB = 1024*1024*1024;
var
  FreeBytesAvailable ,
  TotalNumberOfBytes,
  TotalNumberOfFreeBytes : TLargeInteger;
begin
  Disk := IncludeTrailingPathDelimiter(Disk);

  if not GetDiskFreeSpaceEx(PChar(Disk), FreeBytesAvailable,
    TotalNumberOfBytes, @TotalNumberOfFreeBytes) then
      raise Exception.Create( SysErrorMessage(GetLastError));

  prFreeBytesAvailable     := FreeBytesAvailable / GB;
  prTotalNumberOfBytes     := TotalNumberOfBytes / GB;
  prTotalNumberOfFreeBytes := TotalNumberOfFreeBytes / GB;
end;

// Ej. uso:
procedure TForm1.Button1Click(Sender: TObject);
var
  szAvailable, szTotal, szFree: Double;
begin
  GetDiskInfoSpace('C:', szAvailable, szTotal, szFree );

  ShowMessage(FormatFloat('Espacio total: 0.00', szTotal) + #$A +
    FormatFloat('Espacio libre: 0.00', szFree) + #$A +
    FormatFloat('Espacio libre disponible: 0.00', szAvailable));
end;

SaraTorres 26-10-2017 18:29:43

Eres un genio ecfisa :)
Te lo agradezco (pero no)


La franja horaria es GMT +2. Ahora son las 13:26:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi