首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C#/.NET Framework 使用 Uri 类型表示文件路径时需要注意的问题

C#/.NET Framework 使用 Uri 类型表示文件路径时需要注意的问题

作者头像
jgrass
发布2024-12-25 16:35:46
发布2024-12-25 16:35:46
3940
举报
文章被收录于专栏:蔻丁杂记蔻丁杂记

Uri

Uri Class (System) | Microsoft Docs

从文档和 Uri 的属性可以看出,Uri 主要是为 web 端的场景服务的,当然,本地文件也可以用,但需要注意一个重要的问题,本地文件,只能使用 LocalPath 这一个属性,用于表示文件路径。

其它属性都有可能出错,从而找不到文件。

本地文件只能使用 LocalPath 这一个属性。

本地文件只能使用 LocalPath 这一个属性。

本地文件只能使用 LocalPath 这一个属性。

Demo

代码语言:javascript
复制
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 编码转义。

在线URL编码解码工具-UrlEncode编码-UrlDecode解码在线工具

原始字符串没有协议

属性

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://cloud.tencent.com/developer/article/2481498

本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年2月8日 |,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Uri
  • Demo
  • Demo 结论
  • 教训
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档