AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi GetLogicalDrives und VolumeLabel
Thema durchsuchen
Ansicht
Themen-Optionen

GetLogicalDrives und VolumeLabel

Ein Thema von Willie1 · begonnen am 20. Okt 2024 · letzter Beitrag vom 21. Okt 2024
Antwort Antwort
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

GetLogicalDrives und VolumeLabel

  Alt 20. Okt 2024, 17:52
Hallo Leute,

wie ich sehe, liefert GetLogicalDrives aus den IOUtils nur die Buchstaben und nicht die Laufwerksnamen. Das ist aber hilfreich. Den Quelltext liefert direkt die KI von Bing, das wäre kein Problem. IOUtils ist riesig: gibt es da vielleicht eine Komplettlösung mit den Volume-Namen. Außerdem wäre es schön, wenn das CD-Laufwerk außen vor bliebe, wenn kein Medium einliegt.

Hat jemand Rat oder kennt einen Link.

Gruß Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#2

AW: GetLogicalDrives und VolumeLabel

  Alt 20. Okt 2024, 18:41
Da du schon Bing / CoPilot erwähnt hast, der kann diese Frage auch beantworten (TPath.GetVolumeName(Drive)):



Ja, du kannst auch die `IOUtils`-Einheit in Delphi verwenden, um die Laufwerksnamen zu ermitteln. Hier ist ein Beispiel, wie du dies umsetzen kannst:

Delphi-Quellcode:
uses
  System.SysUtils, System.IOUtils, System.Classes;

procedure TForm1.Button1Click(Sender: TObject);
var
  Drives: TStringDynArray;
  Drive: string;
  DriveList: TStringList;
begin
  DriveList := TStringList.Create;
  try
    Drives := TDirectory.GetLogicalDrives;
    for Drive in Drives do
    begin
      DriveList.Add(Drive + ': ' + TPath.GetVolumeName(Drive));
    end;
    ShowMessage(DriveList.Text);
  finally
    DriveList.Free;
  end;
end;
In diesem Beispiel wird die Methode `TDirectory.GetLogicalDrives` verwendet, um eine Liste der logischen Laufwerke zu erhalten. Anschließend wird `TPath.GetVolumeName` verwendet, um den Namen jedes Laufwerks zu ermitteln.

Falls du weitere Fragen hast oder Hilfe bei der Anpassung des Codes benötigst, lass es mich wissen! 😊
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#3

AW: GetLogicalDrives und VolumeLabel

  Alt 20. Okt 2024, 19:18
Ich habe gerade nochmal nachgeschaut, die Methode gibt es nicht.

Naja, nicht das erste Mal, dass Copilot mir eine Funktion "erfindet", die mir unheimlich geholfen hätte, wenn es sie denn geben würde...
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: GetLogicalDrives und VolumeLabel

  Alt 20. Okt 2024, 19:43
Hallo,

ich habe im eigenen Archiv nachgesehen und bin fündig geworden. Mit SHGetFileInfo aus ShellAPI wird die fertige Lösung geliefert z.B. Windows (C:\) . Genau, was ich wollte. Die Lösung werde ich hier einstellen aber nicht mehr heute. Auch lässt sich aus dem Namen der LW-Buchstabe zurück ermitteln. War hier im Forum mehrfach Thema!

Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: GetLogicalDrives und VolumeLabel

  Alt 21. Okt 2024, 10:26
So geht es:
Delphi-Quellcode:
uses Winapi.ShellAPI;
function GetOneDrive(const Drive: string): string;
var
  FI: TSHFileInfo;
begin
  if SHGetFileInfo(
    PChar(Drive),
    0,
    FI,
    SizeOf(FI),
    SHGFI_DISPLAYNAME
  ) = 0 then
    RaiseLastOSError;
  Result := FI.szDisplayName;
end;

function GetAllDrives: TStringDynArray; overload;
var
  i: Integer;
begin
  Result := TDirectory.GetLogicalDrives;
  for i:=Low(Result) to High(Result) do
    Result[i] := GetOneDrive(Result[i]);
end;
Es wäre schön, wenn die Embas diese nützliche Routine in IOUtils aufnehmen würden. Dann brauchte man sich nicht mit dem Systemaufruf herum zu schlagen. Vergisst man wieder.

Gruß Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: GetLogicalDrives und VolumeLabel

  Alt 21. Okt 2024, 10:40
Zitat:
TPath.GetVolumeName
Lauf Hilfe gab es das zwischen 10.0 und 12.2 nicht.

Die XE- bis XE8-Hilfen werden im aktuellen DocWiki noch verlinkt, sind aber nicht mehr online. (ich glaub aber, die waren vorm letzten Servercrash schon weg)
$2B or not $2B
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
599 Beiträge
 
Delphi XE6 Enterprise
 
#7

AW: GetLogicalDrives und VolumeLabel

  Alt 21. Okt 2024, 13:27
Zitat:
TPath.GetVolumeName
Lauf Hilfe gab es das zwischen 10.0 und 12.2 nicht.
Die Onlinehilfe in XE6 meint dazu "Anmerkung: Die meisten von TPath zur Verfügung gestellten Methoden sind mit den Methoden der Klasse Path im .NET Framework bezüglich der Signatur kompatibel." Das dürfte der Grund sein, wieso der CoPilot die findet...
  Mit Zitat antworten Zitat
Alt 31. Okt 2024, 05:28     Erstellt von DorothyDangelo
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 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