Problemas com Função DiskFree()

25/03/2003

0

Delphi4

função DiskFree(0)
Esta função retorna o espaço livre em bytes do HD, em algumas máquinas com win98 a função retorna valor negativo.

Alguém sabe porque acontece isso ?

Obrigado


Anonymous

Anonymous

Responder

Posts

25/03/2003

Anonymous

também tenho esse problema, mas no Win XP


por favor se alguma alma, souber da solução coloque, para nos a resposta
...valeu ... até mais

Edson


Responder

25/03/2003

Aroldo Zanela

DiskFree returns -1 if the drive number is invalid.

É isso?


Responder

25/03/2003

Anonymous

não, -1 é uma unidade invalida...ok

o que esta retornando é o espaço, ou sei la que valor aquele,
todo negativo

no meu HD retorna -2952....etc


Responder

25/03/2003

Aroldo Zanela

Caro Cirilo,

A função Diskfree é implementada pelo uso de InternalGetDiskSpace, que por sua vez é implementada por GetDiskFreeSpaceEx (API) ou BackfillGetDiskFreeSpaceEx. Apesar de nunca ter presenciado algum problema, fiquei preocupado com o seguinte comentário encontrado na unit windows:

The GetDiskFreeSpace Win32 API does not support partitions larger than 2GB
under Win95. A new Win32 function, GetDiskFreeSpaceEx, supports partitions
larger than 2GB but only exists on Win NT 4.0 and Win95 OSR2.
The GetDiskFreeSpaceEx function pointer variable below will be initialized
at startup to point to either the actual OS API function if it exists on
the system, or to an internal Delphi function if it does not. When running
on Win95 pre-OSR2, the output of this function will still be limited to
the 2GB range reported by Win95, but at least you don´t have to worry
about which API function to call in code you write. }

Vou verificar nas informações técnicas da borland e ver se consigo mais alguma dica.


Responder

25/03/2003

Aroldo Zanela

Cirilo,

Como você está utilizando a versão 4 e eu verifiquei as implementações em Delphi 7, talvez a função abaixo ainda não esteja implementada na sua versão. Se puder, faça um teste com o exemplo da FAQ abaixo:


------------
community.borland.com

Article #17552: Checking available disk space on large drives.

Question and Answer Database

FAQ2552D.txt Checking available disk space on large drives.
Category :Windows API
Platform :All
Product :All 32 bit

Question:
How do I check for available diskspace on a drive larger than 2
gigabytes?


Answer:
You will need to call the Windows API function GetDiskFreeSpaceEx()
and convert the returned integers to doubles, since integers greater
than 2 gigabytes are not supported in Delphi.

Example:

function GetDiskFreeSpaceEx(lpDirectoryName: PAnsiChar;
  var lpFreeBytesAvailableToCaller : Integer;
  var lpTotalNumberOfBytes: Integer;
  var lpTotalNumberOfFreeBytes: Integer) : bool;
  stdcall;
  external kernel32
  name ´GetDiskFreeSpaceExA´;


procedure GetDiskSizeAvail(TheDrive : PChar;
                           var TotalBytes : double;
                           var TotalFree : double);
var
  AvailToCall : integer;
  TheSize : integer;
  FreeAvail : integer;
begin
  GetDiskFreeSpaceEx(TheDrive,
                     AvailToCall,
                     TheSize,
                     FreeAvail);
{$IFOPT Q+}
 {$DEFINE TURNOVERFLOWON}
 {$Q-}
{$ENDIF}
  if TheSize >= 0 then
    TotalBytes := TheSize else
  if TheSize = -1 then begin
    TotalBytes := $7FFFFFFF;
    TotalBytes := TotalBytes * 2;
    TotalBytes := TotalBytes + 1;
  end else
  begin
    TotalBytes := $7FFFFFFF;
    TotalBytes := TotalBytes + abs($7FFFFFFF - TheSize);
  end;

  if AvailToCall >= 0 then
    TotalFree := AvailToCall else
  if AvailToCall = -1 then begin
    TotalFree := $7FFFFFFF;
    TotalFree := TotalFree * 2;
    TotalFree := TotalFree + 1;
  end else
  begin
    TotalFree := $7FFFFFFF;
    TotalFree := TotalFree + abs($7FFFFFFF - AvailToCall);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TotalBytes : double;
  TotalFree : double;
begin
  GetDiskSizeAvail(´C:\´,
                   TotalBytes,
                   TotalFree);
  ShowMessage(FloatToStr(TotalBytes));
  ShowMessage(FloatToStr(TotalFree));
end;


7/16/98 4:31:28 PM

Last Modified: 01-SEP-99

Boa sorte,


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar