Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Laufwerkgrössen ermitteln

  Alt 21. Okt 2021, 12:58
Delphi-Version: 11 Alexandria
Hi zusammen

Mit folgendem Code (/von hier) ermittle ich meine Laufwerke und deren freien Speicher:


Delphi-Quellcode:
function TPopUpWindow.DedectBiggestFreeSpace: Char;
  var i :integer; PopupWindow: TPopupWindow;
begin
  PopupWindow := TPopupWindow.Create(Self);
  PopupWindow.PopupMode := pmExplicit;
  PopupWindow.PopupParent := HomeOfficerFeMain;
  PopupWindow.RzPageControl1.ActivePage := PopupWindow.RzPageControl1.Pages[0];
  PopUpWindow.Position := poMainFormCenter;
  PopUpWindow.GetAllDrives;
end;

function TPopUpWindow.GetAllDrives: TStringDynArray;
  var i: Integer; space : Int64;
begin
  Result := TDirectory.GetLogicalDrives;
  for i:=Low(Result) to High(Result) do
  begin
    Result[i] := GetOneDrive(Result[i]);
    space := DiskFree(i);
    RzRadioGroup1.Items.Add(Result[i] +' -- ' + Inttostr(space));
  end;
end;

function TPopUpWindow.GetOneDrive(const Drive: string): string;
  {Returns the display name for the drive with the given root path.}
  var FI: TSHFileInfo; // info about drive
begin
  if ShellAPI.SHGetFileInfo(PChar(Drive), 0, FI, SizeOf(FI),
     ShellAPI.SHGFI_DISPLAYNAME ) = 0 then
     RaiseLastOSError;
     Result := FI.szDisplayName;
end;
Und so sieht das dann aus:
laufwerke-13_38_03-window.jpg

Der Grund dafür: DiskFree liefert –1, wenn die Laufwerksnummer ungültig ist.

Und nun? Wie geht es verünftig weiter?

Gruss
Delbor

PS: Ich denk, ich hab eine Teilantwort gefunden: D: und E: sind Partitionen auf F:.
Der User soll mit diesem Dialog einen Speicherort für eine Anwendungsgebundene SQLite-DB festlegen.
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (21. Okt 2021 um 13:01 Uhr)
  Mit Zitat antworten Zitat