2013-04-24 88 views
2

我有这样的代码:URI转换为字符串在C#中

public static string FindRelativePath(string basePatrh, string targetPath) 
    { 
     Func<FileSystemInfo, string> getFullName = delegate(FileSystemInfo path) 
      { 
       string fullName = path.FullName; 

       if (path is DirectoryInfo) 
       { 
        if (fullName[fullName.Length - 1] != Path.DirectorySeparatorChar) 
        { 
         fullName += Path.DirectorySeparatorChar; 
        } 
       } 

       return fullName; 
      }; 

     string basePatrhFullName = getFullName(new DirectoryInfo(basePatrh)); 
     string targetPathFullName = getFullName(new DirectoryInfo(targetPath)); 

     Uri basePatrhUri = new Uri(basePatrhFullName); 
     Uri targetPathUri = new Uri(targetPathFullName); 
     Uri relativeUri = basePatrhUri.MakeRelativeUri(targetPathUri); 

     return relativeUri.ToString().Replace('/', '\\'); 
    } 

此代码相比,另一条路径转换路径的相对路径。例如:

FindRelativePath("c:\test","C;\test\dir1\dir2") 

将返回
DIR1 \ DIR2

代码工作很好,但如果在路径空间,例如:

FindRelativePath("c:\test","C;\test\dir1\dir 2") 

则返回错误字符串:

dir1\dir%202 

我该如何解决?

回答

0
public static string FindRelativePath(string basePath, string targetPath) 
{ 
      return Uri.UnescapeDataString(
       basePath.MakeRelativeUri(targetPath) 
        .ToString() 
        .Replace('/', Path.DirectorySeparatorChar) 
       ); 
} 
0

返回的字符串是没有错的%20代表dir2

0

“%20” 是为US-ASCII空格字符 逃脱的编码,所以你必须UNESCAPE它像Uri.UnescapeDataString