![]() |
Volumennamen eines Mapped Network Drives herausfinden
Ich zerbreche mir seit Tagen den Kopf darüber wie man den Volumennamen eines Mapped Network Drives zurückbekommt.
Gibt es eine geeignete Windowsfunktion mit welcher es möglich ist anhand von \\NAS\files_shadow den Volumennamen zu erhalten? Man kann auch einfach mit Pos und Copy den hinteren Teil rauskopieren, aber das ist nicht der richtige Weg denke ich. |
AW: Volumennamen eines Mapped Network Drives herausfinden
Meinst Du sowas
Delphi-Quellcode:
(Missbrauch des Filenames)
ExtractFileName(ExcludeTrailingPathDelimiter('\\NAS\files_shadow\'))
|
AW: Volumennamen eines Mapped Network Drives herausfinden
Einer dieser Befehle kann dabei helfen um an Laufwerk Information zu gelangen.
GetLogicalDriveStrings, GetLogicalDrives, GetDriveType, GetVolumeInformation, und DefineDosDevice. Ich hoffe das es Dir mit Deinem Problem weiterhilft. |
AW: Volumennamen eines Mapped Network Drives herausfinden
Leider bekomme ich es nicht hin den an mein Laufwerk verknüpften Buchstaben zu bekommen wenn die Eingabe \\NAS\files_shadow ist.
|
AW: Volumennamen eines Mapped Network Drives herausfinden
Hatte Dich wohl falsch verstanden: Du hast die Freigabe \\NAS\files_shadow\ der auf Laufwerk X: gemappt ist. Nun möchtest Du wissen, auf welchen UNC-Pfad Laufwerk X: gemappt ist?
|
AW: Volumennamen eines Mapped Network Drives herausfinden
Genau umgekehrt.
Für den von dir genannten Weg habe ich schon eine Lösung, die tatsächlich auch GetLogicalDriveStrings und Konsorten nutzt. Andersherum, also von \\NAS\files_shadow (oder einem Pfad im Allgemeinen) zu X, Y oder welcher Buchstabe auch immer gemappt ist, dafür habe ich keine Lösung. |
AW: Volumennamen eines Mapped Network Drives herausfinden
Zeige doch mal den Code Ausschnitt wie/wo Du "\\NAS\files_shadow\" gesetzt wird/erhalten hast.
Zeige doch mal den Code Ausschnitt wie/wo Du Zugriffe darauf startest. |
AW: Volumennamen eines Mapped Network Drives herausfinden
\\NAS\files_shadow steht fest im Code drin als
Delphi-Quellcode:
Zugriffe habe ich gerade noch keine da drauf, weil ich nicht an den Laufwerksbuchstaben komme (rein theoretisch erst einmal).
const NAS_Laufwerk: string = '\\NAS\files_shadow';
|
AW: Volumennamen eines Mapped Network Drives herausfinden
Vielleicht so: Lauf alle gemappten Laufwerke mit
![]()
Delphi-Quellcode:
Anstelle des ShowMessage dann die Überprüfung auf = NAS_Laufwerk einbauen.
var
LDrive: Char; LPathRemote: array[0..MAX_PATH] of Char; LPathLength: DWord; begin LPathLength:=MAX_PATH; for LDrive:='A' to 'Z' do begin if WNetGetConnection(PChar(''+LDrive+':'), LPathRemote, LPathLength) = NO_ERROR then ShowMessage(LPathRemote); end; |
AW: Volumennamen eines Mapped Network Drives herausfinden
![]() edit Neee. Tut mir leid. Der macht genau das Gegenteil, sorry! |
AW: Volumennamen eines Mapped Network Drives herausfinden
ExpandUNCFileName macht aus einem Pfad wie \\NAS\share etwas wie C:\Users\....\aktuelles verzeichnis\\NAS\share.
Die Lösung mit WNetGetConnection gibt mir genau das zurück was ich suche. Lässt sich das auch auf Laufwerke aller Typen anwenden? |
AW: Volumennamen eines Mapped Network Drives herausfinden
Zitat:
|
AW: Volumennamen eines Mapped Network Drives herausfinden
Der Typ ist unwichtig. Einfach quer durch von A bis z =)
Es geht ja da drum, dass man durch alle Laufwerke gehen kann und den Anzeigenamen bekommt. Aber wenn die Eingabe sowas wie \\NAS\files_shadow ist, sind die mir bekannten Windows-Funktionen nicht mehr arbeitsfähig. Meine Variante / Idee, die aber einen gravierenden Nachteil hat: ich werde die Eingabe \\NAS... in keinster Weise mehr aus.
Delphi-Quellcode:
procedure GetDiskDriveLetters(List: TStringList);
var vDrivesSize: Cardinal; vDrives: array [0 .. 128] of Char; vDrive: PChar; begin List.BeginUpdate; try List.Clear; vDrivesSize := GetLogicalDriveStrings(SizeOf(vDrives), vDrives); if vDrivesSize = 0 then Exit; vDrive := vDrives; while vDrive^ <> #0 do begin List.Add(StrPas(vDrive)); Inc(vDrive, SizeOf(vDrive)); end; finally List.EndUpdate; end; end; function GetVolumeName(const aDriveLetter: Char): string; var DriveInfo: TSHFileInfo; Res: string; sl: TStringList; i: Integer; begin sl := TStringList.Create; try GetDiskDriveLetters(sl); for i := 0 to sl.Count - 1 do begin if AnsiSameText(AnsiUpperCase(aDriveLetter) + ':\', AnsiUpperCase(sl.Strings[i])) then begin FillChar(DriveInfo, SizeOf(DriveInfo), 0); if SHGetFileInfo(PChar(aDriveLetter + ':\'), 0, DriveInfo, SizeOf(DriveInfo), SHGFI_DISPLAYNAME) <> 0 then Res := Trim(StringReplace(DriveInfo.szDisplayName, ' (' + Copy(aDriveLetter + ':\', 1, 2) + ')', '', [rfReplaceAll])) // Lokaler Datenträger (C:) => Lokaler Datenträger else RaiseLastOSError; Break; end; end; finally sl.Free; end; Result := Res; end; var LDrive: Char; LPathRemote: array [0 .. MAX_PATH] of Char; LPathLength: DWORD; VolumeName: string; begin for LDrive := 'A' to 'Z' do begin VolumeName := GetVolumeName(LDrive); if VolumeName .... then end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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