esk
asked on
GetDiskFreeSpaceEx
Is available any demo app that can show disk free space ?
with theese function or other ?
Esk
with theese function or other ?
Esk
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
>The functions DiskSize & DiskFree are not capable of handling drives larger than 2 gigabyte..
In Delphi 4 and 5 they work perfectly!
In Delphi 4 and 5 they work perfectly!
mmm..i had to search to some searching cause i was sure i was right about the drive limits.and yes your correct for d4/5 , for other versions of delphi it returns longint so that is why the drive size limit of less than 2gig. ;-)
ASKER
Inthe, i get an error in this line
GetDiskFreeSpaceEx(TheDriv e,
AvailToCall,
TheSize,
FreeAvail);
Not integer!
Esk
GetDiskFreeSpaceEx(TheDriv
AvailToCall,
TheSize,
FreeAvail);
Not integer!
Esk
ASKER
Epsylon, this function does not return same size as Windows
function DiskFree(Drive: Byte): Int64;
Esk
function DiskFree(Drive: Byte): Int64;
Esk
what version of delphi you using ?
ASKER
Here is a component that can shows free diskspace but it's .dcu file
http://www.besse.de/delphi/d40flib.htm
http://www.besse.de/delphi/d40flib.htm
ASKER
Delphi 5. professional
Esk, DiskFree uses GetDiskFreeSpace internally. That means that GetDiskFreeSpace and GetDiskFreeSpaceEx will return the same values as DiskFree.
I have a 27 GB HDD here and DiskFree returns exactly the same as Windows tells me....
ASKER
I do this
Button1.Caption := IntToStr(DiskSize(3) Div 1024 Div 1024);
Button1.Caption := IntToStr(DiskSize(3) Div 1024 Div 1024);
DiskSize? I though you needed DiskFree..?
Anyway, both function work ok here.
Anyway, both function work ok here.
ASKER
This works
Esk
Esk
Alright, I can go to bed now :o)
ASKER
i have one more.
how can i detect if no disk is in drive a:\
Esk
how can i detect if no disk is in drive a:\
Esk
ASKER
it's okay, i have solve the problem. Found code.
Esk
Esk
THIS IS FROM SOME FAQ:
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(lpDirec
var lpFreeBytesAvailableToCall
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(TheDriv
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
var
TotalBytes : double;
TotalFree : double;
begin
GetDiskSizeAvail('C:\',
TotalBytes,
TotalFree);
ShowMessage(FloatToStr(Tot
ShowMessage(FloatToStr(Tot
end;
Regards Barry