Entwickler-Ecke
Dateizugriff - Diskfree
hansg - Sa 25.01.03 10:27
Titel: Diskfree
Hallo,
wie kann ich mit dem Befehl Diskfree von dem gerade aktiven Laufwerk einer DriveCombobox den freien Speicherplatz anzeigen lassen?
matze - Sa 25.01.03 11:20
eine drive combobox gibt dir in einer ihrer eigenschaften den ausgewähten LW buchstaben zurück. mach einfach in das onchange ereignis der chombobox den code rein, der dien buchstaben abfragt und dann z.b. in einem label die grösse des LWs ausspuckt !
hansg - Sa 25.01.03 16:25
Hallo,
wie mache ich das am besten?
Laut Hilfe liefert DiskFree die Anzahl der freien Bytes auf dem mit Drive angegebenen Laufwerk (0 = aktuelles Laufwerk, 1 = A, 2 = B usw.).
Wie bekomme ich meine Laufwerkbuchstaben (A-Z) entsprechend für die Auswertung gewandelt).
Brueggendiek - Sa 25.01.03 18:16
Hallo Hans!
so:
Quelltext
1: 2: 3: 4: 5:
| function LaufwerkNummer(Laufwerk: Char): Byte; begin Laufwerk := Upcase(Laufwerk); Result := Ord(laufwerk) - Ord('A') + 1; end; |
Gruß
Dietmar Brüggendiek
hansg - Sa 25.01.03 18:55
Hallo Brueggendiek,
danke für den Code.
Wie übergebe ich den LW Buchstaben bzw. wie kann ich das Ergebnis an
Diskfree übergeben?
Brueggendiek - So 26.01.03 12:14
Hallo Hals!
Quelltext
1:
| FreierPlatz := DiskFree(LaufwerkNummer('C')); |
bzw. wenn das in einer DriveComboBox liegt:
Quelltext
1: 2: 3:
| var Box:tDriveComboBox; ... FreierPlatz := DiskFree(Box.Drive); |
Wenn Du Schwierigkeiten hat, Prozeduren/Funktionen und Parameterübergabe anzuwenden, solltest Du vielleicht mal ein gutes Grundlagenbuch lesen oder ein paar Tutorials durcharbeiten!
Es gibt heute leider ein Problem: Borland hatte mal eine kostenlose Personal-Version von Delphi 6 zm Download - und das wurde auch auf Zeitschriften-CDs verteilt. Jetzt haben viele Delphi, aber von Programmiergrundlagen wenig Ahnung.
Dazu kommt, daß Programmieren unter Windows generell viel aufwendiger ist als damals unter DOS - Windows zwingt zu objektorientierter Programmierung, so daß der Einstieg schwerer wird. Das berühmte erste Programm sah unter DOS so aus:
Quelltext
1: 2: 3:
| begin WriteLn('Hallo Welt'); end. |
Unter Windows plage ich mich erst mal mit der Fenster-Oberfläche herum - wer schreibt schon Konsolen-Anwendungen?
Gruß
Dietmar Brüggendiek
hansg - So 26.01.03 13:02
Hallo,
danke für den Tip habe mal in mein Delphi5 Buch nachgelesen.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.DriveComboBox1Change(Sender: TObject); Var s : String[255]; begin s:=Uppercase(DriveCombobox1.Drive); label1.Caption:=inttostr(diskfree(ord(s[1])-64)); // Bytes label2.Caption:=inttostr(diskfree(ord(s[1])-64) div 1024); // MB end; |
Es funktioniert zwar, aber vom abtippen lernt man aber nichts.
Brueggendiek - So 26.01.03 13:55
Hallo!
hansg hat folgendes geschrieben: |
Hallo,
danke für den Tip habe mal in mein Delphi5 Buch nachgelesen.
Quelltext 1: 2:
| s : String[255]; s:=Uppercase(DriveCombobox1.Drive); | |
Da hat der Autor aber mit der Beißzange programmiert! tDriveComboBox.Drive ist ein Char, er hätte s auch als Char deklarieren können.
Meine Rechnung ist übrigens im Prinzip dasselbe, nur daß ich statt einer numerischen Konstante (64) den numerischen Wert des Buchstabens 'A' eingesetzt und die 1 addiert habe.
Das Ganze stammt noch von CP/M (Vorläufer von MS-DOS) - da war es so, daß die Routinen einen numerischen Laufwerkswert erwarteten. Peinlicherweise gab es Routinen, die das aktuelle Laufwerk (Wert=0) bearbeiten konnten und für die Laufwerke A=1, B=2 usw. erwarteten, und Routinen, die kein aktuelles Laufwerk kannten und A=0, B=1 usw. erwarteten. Erleichtert die Umrechnung natürlich ungemein :mrgreen:
Einige der Routinen wurden bei Turbo-Pascal/Delphi von CP/M über DOS nach Windows mitgeschleppt - DiskFree gehört dazu und die 'hakelige' Laufwerksübergabe wurde aus Kompatibilitätsgründen (Übernahme alter Sources) nicht modernisiert.
Übrigens hatte man unter DOS noch kein Result, die Zuweisung ging an den Namen der Function und war Write-Only!
Meine Laufwerks-Umrechnung (aus der ich den geposteten Code entnommen habe) hat einen Boolean-Parameter für Berücksichtigen des aktuellen Laufwerks und ist noch mit 2 Rechnungen für beide Fälle versehen, heute kann man nach dem Umrechnen auf der Basis A=0 noch mit einem bedingten "Inc(Result)" arbeiten.
Obwohl DiskFree uralt ist, ist das Ergebnis ein Int64 und der Wert auch bei Freiplatz über 2GB korrekt - die Windows-API-Funktion (GetDiskFreeSpace) liefert max. 2GB (viele Installationsprogramme melden max. 2GB freien Platz!) - bei Borland hat man offensichtlich aufgepasst (D5 Standard) und den Nachfolger (GetDiskFreeSpaceEx) verwendet.
Gruß
Dietmar Brüggendiek
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!