【发布时间】:2011-04-18 17:27:28
【问题描述】:
我正在生成从 1 个目录到另一个目录的相对路径。如果 OutputDirectoryName 属性是包含空格的目录,则使用 %20 而不是空格对空格进行编码。我正在创建一个 Windows 文件夹的相对路径,所以我的相对路径必须使用空格。有没有一种干净的方法来指定 URI 的编码方式?我知道我可以在 relativePath.ToString() 上进行替换,但我想知道是否有更好的实现。 谢谢。
public string GetOutputDirectoryAsRelativePath(string baseDirectory)
{
Uri baseUri = new Uri(baseDirectory);
Uri destinationUri = new Uri(OutputDirectoryName);
Uri relativePath = baseUri.MakeRelativeUri(destinationUri);
return relativePath.ToString();
}
【问题讨论】:
-
为什么需要用空格替换 %20 ?这是在 URI 中表示空格的正确方法。如果您将字符串传递给期望 URI 的代码,那么它将知道 %20 表示空格。
-
@andy:他可能想要一个不是 URL 编码的 Windows 文件路径。
-
@SLarks,没错。 @andynormancx,“我正在创建 Windows 文件夹的相对路径”
-
简单地替换 %20 绝对不是要走的路。 Windows 路径中还有其他有效字符将由 Uri 类编码。使用 Uri.UnescapeDataString 对我来说似乎是最好的选择。
-
@andy,你是对的。这不在答案部分,所以它必须去达斯。谢谢!
标签: c# uri relative-path