Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   GetFinalPathNameByHandle bei Netzlaufwerken? (https://www.delphipraxis.net/207004-getfinalpathnamebyhandle-bei-netzlaufwerken.html)

MicMic 15. Feb 2021 19:56

GetFinalPathNameByHandle bei Netzlaufwerken?
 
Hallo,
ich finde leider noch keine Lösung.
Ich nutze "GetFinalPathNameByHandle" damit ich die Symlinks folgen kann (wenn vorhanden). Also z.B. "C:\Dokumente und Einstellungen" zu "C:\Users". Das funktioniert auch alles soweit sehr gut. Wenn es halt kein SymLink ist, bleibt der Pfad wie er ist. Habe ich aber ein Netzlaufwerk (z.B. Laufwerk Z), dann bekomme ich von der Funktion nicht die Laufwerks-Pfade (Z:\Ordner1 oder Z:\Ordner2), sondern die eigentliche Quelle (\\Servername\Freigabename\Ordner1 oder \\Servername\Freigabename\Ordner1) zurück. Ich will schon SymLinks auf Netzwerklaufwerken folgen können (wenn vorhanden) aber möchte doch gerne dann bei dem Laufwerksbuchstabe Z bleiben.

Gibt es da ein Trick oder dazugehörige Funktionen?

Gruß Mike

MicMic 15. Feb 2021 20:12

AW: GetFinalPathNameByHandle bei Netzlaufwerken?
 
Mir fällt selbst nur ein den Teil "\\Servername\Freigabename\" wieder durch "Z:" zu ersetzen. Also Copy/Pos/Delete Zeugs. Aber vielleicht gibt es elegantere Lösungen/Funktionen?

KodeZwerg 19. Feb 2021 23:05

AW: GetFinalPathNameByHandle bei Netzlaufwerken?
 
Erziehlst du hiermit das gleiche Ergebnis?

Delphi-Quellcode:
function GetSymTarget(const SymLink: string): string;
var
  LinkHandle: THandle;
  TargetName: array [0..512] of Char;
begin
  Result := '';
  LinkHandle := CreateFile(PChar(SymLink), 0, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
  Win32Check(LinkHandle <> INVALID_HANDLE_VALUE);
  try
    if GetFinalPathNameByHandle(LinkHandle, TargetName, 512, FILE_NAME_NORMALIZED) > 0 then
      Result := string(TargetName);
      else
      RaiseLastOSError;
  finally
    CloseHandle(LinkHandle);
  end;
end;

DieDolly 20. Feb 2021 09:56

AW: GetFinalPathNameByHandle bei Netzlaufwerken?
 
Zitat:

Zitat von MicMic (Beitrag 1483057)
Mir fällt selbst nur ein den Teil "\\Servername\Freigabename\" wieder durch "Z:" zu ersetzen. Also Copy/Pos/Delete Zeugs. Aber vielleicht gibt es elegantere Lösungen/Funktionen?

Ich habe den Code da oben nicht getestet. Aber wenn man "Servername" hat, kann man einfach alle Laufwerke durchlaufen und den Namen vergleichen.

KodeZwerg 20. Feb 2021 23:05

AW: GetFinalPathNameByHandle bei Netzlaufwerken?
 
Zitat:

Zitat von DieDolly (Beitrag 1483381)
Zitat:

Zitat von MicMic (Beitrag 1483057)
Mir fällt selbst nur ein den Teil "\\Servername\Freigabename\" wieder durch "Z:" zu ersetzen. Also Copy/Pos/Delete Zeugs. Aber vielleicht gibt es elegantere Lösungen/Funktionen?

Ich habe den Code da oben nicht getestet. Aber wenn man "Servername" hat, kann man einfach alle Laufwerke durchlaufen und den Namen vergleichen.

"Einfach" ist relativ :-)
Die meisten fremdlaufwerke bei uns wollen ja mit einem usernamen und passwort beglückt werden, was eine automatisierung kaum zulässt. Ich hoffe hier auch auf hilfe zu diesem Thema zu stoßen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 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