Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi GetDiscFreeSpacEx mit verschiedenen Laufwerksbuchstaben (https://www.delphipraxis.net/132057-getdiscfreespacex-mit-verschiedenen-laufwerksbuchstaben.html)

g00gle-gott 5. Apr 2009 13:11


GetDiscFreeSpacEx mit verschiedenen Laufwerksbuchstaben
 
GetDiscFreeSpacEx mit verschiedenen Laufwerksbuchstaben aufrufen...

hallo an alle,

bin gerade dabei ein Programm zu machen, welches verschiedene PC-spezifische Daten liefert wie zB CPU-geschwindigkeit, Arbeitsspeicher oder eben auch Festplattenspeicher.
Hier liegt jedoch mein Problem, dass ich es nicht hinbekomme, die Funktion GetDiscFreeSpaceEx mit unterschiedlichen Laufwerksbuchstaben aufzurufen (je nach inhalts eines editfeldes).

hier mein bisheriger Lösungsansatz:

Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
var
  freeCaller,
  total: Int64;
  Laufwerksbuchstabe : char;
  zeiger : pchar;
  x : array [0..255] of char;
begin
  Laufwerksbuchstabe:=edit2.Text[1];
  zeiger:=x;
  zeiger[1]:=Laufwerksbuchstabe;
  zeiger[2]:=':';
  zeiger[3]:='\';
  zeiger[4]:=#0;
  GetDiskFreeSpaceEx((Zeiger), freeCaller, total, nil)
  showmessage('Freier Speicher: '+IntToStr(((freeCaller div 1024)div 1024)div 1024)+' Gigabytes');
  showmessage('Gesamter Speicher: '+(IntToStr(((total div 1024)div 1024)div 1024)+' Gigabytes'));
end;
das war bisher die einzige Lösung, die Funktioniert hat bzw sich kompilieren ließ, ABER: wenn ich dann im Programm entsprechenden Button klicke liefert mir die Funktion als ausgabe nur müll! ...

kann mir jemand weiterhelfen
1.wie ich das sauberer lösen kann (ohne array of char und 3 Variabeln!) und
2.wie ich es richtig zum laufen bekomme mit vernünftigen ausgabewerten :wink:

vielen dank im Vorraus und :dp:

Grüße Ändy

jaenicke 5. Apr 2009 13:14

Re: GetDiscFreeSpacEx mit verschiedenen Laufwerksbuchstaben
 
Hier ists zwar auch überhaupt nicht schön geschrieben, funktioniert aber:
http://www.swissdelphicenter.ch/torr...ode.php?id=654

// EDIT:
Und wie wäre es so:
Delphi-Quellcode:
procedure TfrmMain.Button1Click(Sender: TObject);

  function GetFreeSpace(DriveLetter: Char; var TotalSpace: Int64): Int64;
  begin
    GetDiskFreeSpaceEx(PChar(DriveLetter + ':\'), Result, TotalSpace, nil);
  end;

var
  FreeSpace, Total: Int64;
begin
  FreeSpace := GetFreeSpace('c', Total);
  ShowMessage('Freier Speicher: ' + IntToStr(FreeSpace div 1073741824) +' Gibibyte');
  ShowMessage('Gesamter Speicher: ' + IntToStr(Total div 1073741824) + ' Gibibyte');
end;

_frank_ 5. Apr 2009 13:36

Re: GetDiscFreeSpacEx mit verschiedenen Laufwerksbuchstaben
 
Zitat:

Zitat von jaenicke
Hier ists zwar auch überhaupt nicht schön geschrieben, funktioniert aber:

die ersten 4 zeilen (füllen des Arrays) lässt sich auch in einer machen:

Delphi-Quellcode:
  strPCopy(RootPath,drive+':\');
hängt PChar auch das #0 ran?

Gruß Frank

g00gle-gott 5. Apr 2009 16:43

Re: GetDiscFreeSpacEx mit verschiedenen Laufwerksbuchstaben
 
hallo,

@jaenicke
hab es anhand deiner 2. Lösung folgendermaßen realisiert:
nur hier die Zeile etwas editiert um laufwerksbuchstaben zu wählen:

Delphi-Quellcode:
  FreeSpace := GetFreeSpace(edit2.text[1], Total);
vielen dank für die schnelle Hilfe
Gruß Ändy

jaenicke 5. Apr 2009 19:28

Re: GetDiscFreeSpacEx mit verschiedenen Laufwerksbuchstaben
 
Zitat:

Zitat von _frank_
hängt PChar auch das #0 ran?

Delphi-Strings enthalten auch ein Nullzeichen, allerdings nicht ale letztes Zeichen sondern als Zeichen dahinter. Genau wie die Längenangabe 4 Byte vor dem Start des Strings und dem Referenzzähler nochmal 4 Byte davor ist das nur nicht direkt für den Programmierer sichtbar, macht aber die Verwendung als PChar einfach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz