Uri
Uri Class (System) | Microsoft Docs
从文档和 Uri 的属性可以看出,Uri 主要是为 web 端的场景服务的,当然,本地文件也可以用,但需要注意一个重要的问题,本地文件,只能使用 LocalPath
这一个属性,用于表示文件路径。
其它属性都有可能出错,从而找不到文件。
本地文件只能使用 LocalPath
这一个属性。
本地文件只能使用 LocalPath
这一个属性。
本地文件只能使用 LocalPath
这一个属性。
Demo
public static void Test(){ var folder1 = @"C:\Test\张 三\"; var folder2 = @"C:\Test\zhang san\"; System.IO.Directory.CreateDirectory(folder1); System.IO.Directory.CreateDirectory(folder2); var file1 = Path.Combine(folder1, "test.txt"); var file2 = Path.Combine(folder2, "test.txt"); File.WriteAllText(file1, "NULL"); File.WriteAllText(file2, "NULL");
Console.WriteLine("中文路径"); Test(file1);
Console.WriteLine("\n英文路径"); Test(file2);
var file_protocol_1 = $"file:///{file1}"; var file_protocol_2 = $"file:///{file2}";
Console.WriteLine("\n带协议 中文路径"); Test(file_protocol_1);
Console.WriteLine("\n带协议 英文路径"); Test(file_protocol_2);}
private static void Test(string filePath){ Uri uri = new Uri(filePath); Console.WriteLine($"OriginalString {uri.OriginalString}\n{File.Exists(uri.OriginalString)}"); Console.WriteLine($"AbsoluteUri {uri.AbsoluteUri}\n{File.Exists(uri.AbsoluteUri)}"); Console.WriteLine($"AbsolutePath {uri.AbsolutePath}\n{File.Exists(uri.AbsolutePath)}"); Console.WriteLine($"LocalPath {uri.LocalPath}\n{File.Exists(uri.LocalPath)}");}
Demo 结论
其实与语言无关,只要中间出现非英文字符,就会出现 URL 编码转义。
原始字符串没有协议
属性 | 值 | File.Exist |
---|---|---|
OriginalString | C:\Test\zhang san\test.txt | true |
AbsoluteUri | file:///C:/Test/zhang%20san/test.txt | false |
AbsolutePath | C:/Test/zhang%20san/test.txt | false |
LocalPath | C:\Test\zhang san\test.txt | true |
原始字符串带有协议
属性 | 值 | File.Exist |
---|---|---|
OriginalString | file:///C:\Test\zhang san\test.txt | false |
AbsoluteUri | file:///C:/Test/zhang%20san/test.txt | false |
AbsolutePath | C:/Test/zhang%20san/test.txt | false |
LocalPath | C:\Test\zhang san\test.txt | true |
教训
本地文件只能使用 LocalPath
这一个属性。
本地文件只能使用 LocalPath
这一个属性。
本地文件只能使用 LocalPath
这一个属性。
原文链接: https://blog.jgrass.cc/posts/csharp-uri-local-path/
本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。