Solved

GetDiskFreeSpaceEx

Posted on 2000-04-01
17
377 Views
Last Modified: 2010-04-04
Is available any demo app that can show disk free space ?

 with theese function or other ?

 Esk
0
Comment
Question by:esk
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 6
  • 3
17 Comments
 
LVL 13

Accepted Solution

by:
Epsylon earned 10 total points
ID: 2676831
Use the DiskFree function:

function DiskFree(Drive: Byte): Int64;

0 = current drive
1 = A:
2 = B:
3 = C:
etc...
0
 
LVL 17

Expert Comment

by:inthe
ID: 2677014
The functions DiskSize & DiskFree are not capable of handling drives larger than 2 gigabyte..

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(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;


Regards Barry
0
 
LVL 13

Expert Comment

by:Epsylon
ID: 2677026
>The functions DiskSize & DiskFree are not capable of handling drives larger than 2 gigabyte..

In Delphi 4 and 5 they work perfectly!
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 17

Expert Comment

by:inthe
ID: 2677060
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. ;-)
0
 

Author Comment

by:esk
ID: 2677063
Inthe, i get an error in this line

 GetDiskFreeSpaceEx(TheDrive,
                                           AvailToCall,
                                           TheSize,
                                           FreeAvail);
Not integer!

Esk
0
 

Author Comment

by:esk
ID: 2677068
Epsylon, this function does not return same size as Windows

function DiskFree(Drive: Byte): Int64;

Esk
0
 
LVL 17

Expert Comment

by:inthe
ID: 2677070
what version of delphi you using ?
0
 

Author Comment

by:esk
ID: 2677073
Here is a component that can shows free diskspace but it's .dcu file

http://www.besse.de/delphi/d40flib.htm
0
 

Author Comment

by:esk
ID: 2677074
Delphi 5. professional
0
 
LVL 13

Expert Comment

by:Epsylon
ID: 2677077
Esk, DiskFree uses GetDiskFreeSpace internally. That means that GetDiskFreeSpace and GetDiskFreeSpaceEx will return the same values as DiskFree.
0
 
LVL 13

Expert Comment

by:Epsylon
ID: 2677080
I have a 27 GB HDD here and DiskFree returns exactly the same as Windows tells me....
0
 

Author Comment

by:esk
ID: 2677083
I do this

Button1.Caption := IntToStr(DiskSize(3) Div 1024 Div 1024);
0
 
LVL 13

Expert Comment

by:Epsylon
ID: 2677089
DiskSize? I though you needed DiskFree..?

Anyway, both function work ok here.
0
 

Author Comment

by:esk
ID: 2677094
This works

Esk
0
 
LVL 13

Expert Comment

by:Epsylon
ID: 2677097
Alright, I can go to bed now   :o)
0
 

Author Comment

by:esk
ID: 2677124
i have one more.

how can i detect if no disk is in drive a:\

Esk
0
 

Author Comment

by:esk
ID: 2677561
it's okay, i have solve the problem. Found code.

Esk
0

Featured Post

Ready to get started with anonymous questions?

It's easy! Check out this step-by-step guide for asking an anonymous question on Experts Exchange.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…
Suggested Courses
Course of the Month8 days, 5 hours left to enroll

617 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question