Hallo,
ich habe
hier diesen Code gefunden der den Pfad zu gemappten Netzlaufwerken ausgibt. Ich habe diesen Code ganz minimal abgeändert um dann mit meiner Funktion komplette Pfade zu übergeben die dann in einen
UNC-Pfad umgewandelt werden können.
Vielleicht kann es ja noch einer gebrauchen.
Delphi-Quellcode:
uses
...StrUtils;
function ResolveShareName (LocalDevice : String) : String;
var
pLocName : PChar;
pShareName : PChar;
FuncResult : DWORD;
BufLength : Cardinal;
begin
// Speicher für die Strings allozieren!
pLocName := StrAlloc(255);
pShareName := StrAlloc(255);
// String in PString kopieren
StrPCopy (pLocName, LocalDevice);
BufLength := 255;
FuncResult := WNetGetConnection(pLocName,pShareName,BufLength);
if FuncResult <> NO_ERROR then
Result := pLocName
else
Result := pShareName;
// aufräumen!
StrDispose (pShareName);
StrDispose (pLocName);
end;
function ConvertPathToUNC (FileName : String) : String;
var
Drive, UNC_PATH : String;
PosDrive : Integer;
begin
PosDrive := Pos(':\', FileName);
while PosDrive > 0 do
begin
Drive := Copy (FileName, PosDrive - 1, 2);
if GetDriveType(PChar(Drive)) = DRIVE_REMOTE then
begin
UNC_PATH := ResolveShareName (Drive);
Delete (FileName, PosDrive - 1, 2);
Insert (UNC_PATH, FileName, PosDrive - 1);
PosDrive := Pos(':\', FileName);
end
else
begin
PosDrive := PosEx(':\', FileName, PosDrive + 1);
end;
end;
Result := FileName;
end;
Aufruf wäre bspw. so:
showmessage(ConvertPathToUNC('S:\Test\Test.txt'));
Als Ergebnis käme dann folgendes raus:
'\\Server\Test\Test.txt'