将具有类似转义序列的文件路径转换为System.Uri

时间:2017-10-08 14:55:10

标签: c# .net path uri

在对this question的评论中,注意到并不总是可以通过System.Uri类将文件路径转换为URI字符串。这留下了一个问题:如何将任意文件路径表示为System.Uri?

以下是一些细节。如果应用程序的目标.Net版本低于4.5,那么即使安装了.Net 4.5+,System.Uri构造函数也不会尝试取消原始字符串。所以问题涉及到.Net 4.5+的代码。在那些更高版本中,从字符串创建System.Uri实例的任何方法最终都会在一些混乱的内部代码中尝试“转义 - 转义”输入。结果是'%25'永远不会转义,但'%'后跟两个十六进制数字,编码任何非特殊的ASCII字符始终是未转义的。例如,

var uri = new System.Uri(@"C:\%51.txt");

给uri带有uri.LocalPath == @“C:\ Q.txt”,

var uri = new System.Uri(@"C:\%2551.txt");

使用uri.LocalPath == @“C:\%2551.txt”创建一个uri。

乍一看,似乎无法将相当有效的本地文件名'%51.txt'转换为等效的System.Uri。但也许有人知道一种方式吗?

1 个答案:

答案 0 :(得分:0)

采用this comment作为答案。预构建的URI字符串应该用作System.Uri构造函数的参数,而不是原始的本地路径,以避免转换问题,例如:新的Uri("文件:/// C:%2551.txt")用于路径"%51.txt"。