![]() |
Laufwerkspfad
Wie findet man heraus, welche Laufwerke ( A:; C:; D:;...) es gibt?
|
Folgende Funktion testet die Laufwerke
Code:
A = 0
function DriveExists(DriveByte: Byte): Boolean;
begin Result := GetLogicalDrives and (1 shl DriveByte) <> 0; end; B = 1 C = 2 ... |
und dieser Code liefert den Laufwerkstyp zurück
Code:
--> und ab in die Code Bibliothek
function DriveType(DriveByte: Byte): String;
begin case GetDriveType(PChar(Chr(DriveByte + Ord('A')) + ':\')) of DRIVE_UNKNOWN: Result := 'unbekannt'; DRIVE_NO_ROOT_DIR: Result := 'Laufwerk existiert nicht'; DRIVE_REMOVABLE: Result := 'Wechselmedium'; DRIVE_FIXED: Result := 'Festplatte'; DRIVE_REMOTE: Result := 'Netzwerk'; DRIVE_CDROM: Result := 'CD-ROM/DVD'; DRIVE_RAMDISK: Result := 'RAM Disk'; else Result := 'anderer Laufwerkstyp'; end; end; :cat: |
Moin Zusammen,
es ginge auch GetLogicalDriveStrings, wenn einem die Laufwerksbuchstaben genügen. Die gibt's damit im Format C:\#00D:\#00... |
Zitat:
|
Immer den entsprechenden Wert des Laufwerksbuchstaben. Die Funktion gibt dann entsprechen True oder False zurück. Funktioniert auch nach einer Neukonfiguration der Laufwerke. Schau mal in die Code-Bibliothek, da habe ich auch noch ein klitzekleines Beispiel dazu beigefügt.
:cat: |
Moin Daniel B,
das hat sakura etwas unglücklich dargestellt. GetLogicalDrives gibt eine Bitmaske für die Laufwerke zurück. Die Liste beschreibt den Exponenten zur Basis 2. Also existieren die Laufwerke A und C, so gibt die Funktion 5 zurück 101 Binär. Linke 1 = C rechte = A. Als Metacode: if GetLogicalDrives and 2 hoch (ord(Upcase(Laufwerksbuchstabe))-65) <> 0 then Laufwerk existiert. |
Zitat:
So eine schöne Funktion und Du wagst es Dir... :lol: :cat: |
@ Christian:
Was geb ich der GetLogicalDriveStrings Funktion für Parameter damit die mir die Laufwerksbuchstaben so auflistet? Gruß |
@Thomas
hast du den Beitrag dazu in den Faq's gesehen? ![]() |
Den Beitrag von sakura habe ich gelesen, nur mir eht's um die GetLogicalDriveStrings Funktion.
Gruß |
Code:
Ungetestet, sollte aber funktionieren.
procedure LoadLogicalDrives(Strings: TStrings);
var S: DWORD; AllStrings, CurrentString: PChar; begin S := 255; GetMem(AllStrings, Succ(S)); GetLogicalDriveStrings(S, AllStrings); try if AllStrings <> nil then begin CurrentString := AllStrings; while True do begin Strings.Add(StrPas(CurrentString)); Inc(CurrentString, Succ(StrLen(CurrentString))); if CurrentString[0] = #0 then Break; end; end; finally FreeMem(AllStrings); end; end; :!: :!: Getestet und korrigiert!!! :cat: |
Danke :!: :!:
|
Moin Zusammen,
ich hätte da noch eine Variante:
Code:
Dürfte allerdings nicht besonders schnell sein ;-)
procedure GetDriveLetterList(const p_slResult : TStrings);
var sWork : string; begin sWork := StringOfChar(#00,105); GetLogicalDriveStrings(105,@sWork[1]); p_slResult.Text := StringReplace(sWork,':\'#00,#13#10,[rfReplaceall]); end; |
Hi Christian,
deine Variante ist vielleicht nicht besonders schnell, strotzt aber vor Einfachheit. :) Mir gefällt Deine Lösung sehr gut und für interaktive (Client-)Programme ist diese ausreichend schnell. ;) :cat: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz