Entwickler-Ecke

Dateizugriff - Freien Platz auf einem Laufwerk bestimmen


DELPHIn - Mi 14.01.04 19:39
Titel: Freien Platz auf einem Laufwerk bestimmen
Hallo,

ich möchte den freien Platz auf einer Festplatte bestimmen. Diskfree und ähnliche Funktionen kenne ich auch schon die verlangen aber alle entweder ein Byte oder ein PChar als Übergabe. Ich möchte aber einen beliebigen Pfad, also ein String, den der User zur Laufzeit eingibt nehmen und ihm die Daten wie Laufwerksgrösse und freier Speicher zurückgeben (auf die Festplatte bezogen auf der das Verzeichnis liegt).

Und genau da stehe ich auf dem Schlauch. :( Auch die Hilfe von Delphi oder dieses Forum haben mich bisher nicht weitergebracht.

Was kann ich tun, muss ja irgentwie gehen!

Danke

Moderiert von user profile iconTino: Verschoben.


KidPaddle - Mi 14.01.04 19:51

Path enthält den kompletten Pfadnamen inklusive dem Laufwerksbuchstaben in der Form [Laufwerk]:\Pfad


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function GetFreeSpace(const Path : String) : Int64;
var
  pPath : array[0..255of Char;
  Drive : Byte;
begin
  StrPCopy(pPath, UpperCase(Path));
  Drive  := ORD(pPath[0]) - 64;
  if (Drive >= 65and (Drive <= 91then begin
    Result := DiskFree(Drive);
  end else begin
    raise Exception.Create('Es wurde kein gültiger Pfad angegeben!');
  end;
end;


Ist nicht getestet, müßte aber so funktionieren.

Gruß
KidPaddle

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


Delete - Mi 14.01.04 20:37

Oder:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
function FreeDiskSpace(const Drive: stringvar FreeBytesAvailable,
  TotalNumberOfBytes, TotalNumberOfFreeBytes: TLargeInteger): Boolean;
begin
  result := GetDiskFreeSpaceEx(pointer(Drive), FreeBytesAvailable,
    TotalNumberOfBytes, @TotalNumberOfFreeBytes);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  FreeAvailable, Total, FreeBytes: TLargeInteger;
begin
  if FreeDiskSpace('c:\Programme', FreeAvailable, Total, FreeBytes) then
    with Listbox1.Items do
    begin
      Add(IntToStr(FreeAvailable));
      Add(IntToStr(Total));
      Add(IntToStr(FreeBytes));
    end
  else
    RaiseLastOSError();
end;


DELPHIn - Do 15.01.04 09:11

Danke :P euch beiden für die Hilfe, da wäre ich nie drauf gekommen..