2017-07-19 4 views
0

Ich habe die folgende Funktion:PathRelativePathTo wandelt Unicode charactrs in ASCII

public static string GetRelativePath(string fromPath, string toPath) 
    { 
     // we also tried the Uri solution but that does not return .. when you need to traverse 
     // one up only 
     // uri1 = "bla\foo" 
     // uri2 = "bla\bar" 
     // uri1.MakeRelaitveto(uri2) != "..\bar" 
     var path = new StringBuilder(260); // MAX_PATH 
     if (PathRelativePathTo(
      path, 
      fromPath.Replace('/', '\\'), 
      FILE_ATTRIBUTE_DIRECTORY, 
      toPath.Replace('/', '\\'), 
      FILE_ATTRIBUTE_DIRECTORY) == 0) 
     { 
      return toPath; 
     } 

     return path.ToString().Replace('\\', Path.DirectorySeparatorChar); 
    } 

    [DllImport("shlwapi.dll", SetLastError = true)] 
    private static extern int PathRelativePathTo(
     StringBuilder pszPath, string pszFrom, int dwAttrFrom, string pszTo, int dwAttrTo); 
} 

die ich mit dem folgenden Testfall nennen:

GetPathRelativeTo("C:\\somεpath", "C:\\anothεrpath").Shouldbe("..\\anothεrpath") 

sondern ist es ..\\anotherpath zurück. Beachten Sie, dass die ε durch eine e ersetzt wurde.

Ich versuchte mit PathRelativePathToW, aber das funktioniert noch weniger (andere Testfälle scheitern).

Weiß jemand, was vor sich geht und wie ich den Ersatz des Chars verhindern kann?

Antwort

Verwandte Themen