如何通过Delphi函数将UNC路径转换为对应的映射驱动器路径?
Delphi实现UNC路径到映射驱动器路径的转换
Delphi没有内置直接实现该功能的函数,但可以通过调用Windows API枚举网络驱动器映射关系,匹配UNC路径前缀来完成转换。以下是符合需求的函数实现:
function ConvertUNCPathToDrivePath(const AUncPath: string): string; var Drive: Char; UncRoot: array[0..MAX_PATH] of Char; UncPathLower, UncRootLower: string; begin Result := AUncPath; // 无匹配时返回原路径 // 验证输入是否为合法UNC路径(以\\开头) if not (Length(AUncPath) >= 2 and (AUncPath[1] = '\') and (AUncPath[2] = '\')) then Exit; UncPathLower := LowerCase(AUncPath); // 遍历所有驱动器号(A-Z) for Drive := 'A' to 'Z' do begin // 获取当前驱动器对应的UNC根路径 if WNetGetConnection(PChar(Drive + ':'), UncRoot, MAX_PATH) = NO_ERROR then begin UncRootLower := LowerCase(StrPas(UncRoot)); // 检查输入UNC路径是否以该驱动器的UNC根为前缀 if StartsText(UncRootLower, UncPathLower) then begin // 替换前缀为驱动器号+:\ Result := Drive + ':' + Copy(AUncPath, Length(UncRoot) + 1, MaxInt); Break; // 找到匹配后终止遍历 end; end; end; end;
注意事项:
- 需要在
uses中添加Windows, Winapi.Mpr, StrUtils单元(Mpr单元包含WNetGetConnection函数) - 函数会先验证输入格式,非合法UNC路径直接返回原路径
- 采用大小写不敏感匹配,避免因路径大小写差异导致匹配失败
- 若存在多个驱动器映射到同一UNC根的情况,函数会返回第一个匹配到的驱动器路径
测试示例:当输入\\Mac\Home\Documents且该UNC根\\Mac\Home已映射为Y盘时,函数将返回Y:\Documents
内容的提问来源于stack exchange,提问作者user1580348
相关产品推荐
相关产品推荐

