最近用到FSRM,发现无法识别UNC路径,因此写了这段转义Code。
static string ConvertUNC2Local(string UNC) { Dictionary<string, string> UncLocal = new Dictionary<string, string>(); ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_share"); foreach (ManagementObject obj in searcher.Get()) { string name = (string)obj.Properties["Name"].Value; string local = (string)obj.Properties["Path"].Value; UncLocal.Add(name.ToLower(), local); } string rootPath; string[] shareNameAndRelativePath = GetShareNameAndRelativePath(UNC); if (!UncLocal.TryGetValue(shareNameAndRelativePath[0].ToLower(), out rootPath)) { Console.WriteLine("The UNC you input is not local path."); return string.Empty; } else { return Path.Combine(rootPath, shareNameAndRelativePath[1]); } } static string[] GetShareNameAndRelativePath(string UNC) { string[] result = new string[2]; Regex reg = new Regex(@"\d\\"); MatchCollection mc = reg.Matches(UNC); int index = mc[0].Index + 2; int nextIndex = UNC.IndexOf('\\', index); int length = nextIndex - index; result[0] = UNC.Substring(index, length); result[1] = UNC.Substring(nextIndex + 1); return result; }