Einzelnen Beitrag anzeigen

ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#1

Pfade zu Dateien auf Netzlaufwerken in UNC-Pfade umwandeln

  Alt 15. Jul 2005, 22:22
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'
  Mit Zitat antworten Zitat