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
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