Autor Beitrag
manta656
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 18



BeitragVerfasst: Mi 04.02.09 20:00 
Hi , ich hab cor ein paar Tagen mit Delphi angefangen , und da hab mich mal das hier gemacht :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm3.Button3Click(Sender: TObject);
var freeCaller, total: Int64;
begin
  GetDiskFreeSpaceEx('E:\', freeCaller, total, nil);
  label1.caption:='Freier Speicher: '+IntToStr(freeCaller)+' Bytes';
  label2.caption:='Gesamter Speicher: '+IntToStr(total)+' Bytes';
end;

Das Problem ist , wen ich keinen Datenträger E: hab , dan gibt mir das programm :

Freier Speicher: 18824790122967791 Bytes
Gesamter Speicher: 9095068328498755156 Bytes

und kan mir einer sagen , wie ich dan machen kan , dass er anstatt das anzeigt zum beispiel sagt :
Kein Datenträger 'H:\' vorhanden!

und wie kan man das ganze in Gb anzeigen ^^

mfg manta
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.02.09 20:19 
Mal schnell dahergeschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure ShowMeTheSpace(c: Char);
var Total, Free, dummy: Int64;
    s: string;
begin
  s := c + ':';
  if GetDiskFreeSpaceEx(PChar(s),dummy,Total,@Free) then
    ShowMessage(Format('Gesamt: %.1f GB'#13#10'Frei: %.1f GB',
                       [Total / 1024 / 1024 / 1024,
                        Free / 1024 / 1024 / 1024]))
  else
    ShowMessage(SysErrorMessage(GetLastError));
end;

Der Parameter c steht für den Laufwerksbuchstaben.
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Mi 04.02.09 20:24 
Hallo und willkommen im Forum!

Die Funktion GetDiskFreespaceEx gibt einen Wahrheitswert, ob der Aufruf erfolgreich war, zurück. Diesen müsstest Du nur auswerten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm3.Button3Click(Sender: TObject);
var freeCaller, total: Int64;
begin
  if (GetDiskFreeSpaceEx('E:\', freeCaller, total, nil)) then
    begin
      { ... }
    end;
end;


Und um von Byte nach GigaByte umzurechnen musst Du Deinen Wert durch 1024 teilen, und zwar pro jeder größeren Einheit (Byte - KiloByte - MegaByte - GigaByte : Gigabyte := Byte / 1024 / 1024 / 1024)

Obwohl Deddy deutlich schneller war, schicke ich trotzdem mal ab, da ein paar mehr Erklärungen in meinem Post drin sind. Dir nützt es nämlich herzlich wenig, wenn Du weißt, dass der Code so funktioniert, aber Du gar keine Ahnung hast, warum er funktioniert.

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
manta656 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 18



BeitragVerfasst: Do 05.02.09 17:50 
hab mir auch gedacht , ob ich nicht einfach eine Rechnung rein mache. Es könnte ja sein , ob es einen befehl dafür gibt , aber wie es scheint nicht werde es mal versuchen danke ;)

/edit

Ja es hat geklappt thx :D