C#/.NET Framework 使用 Uri 类型表示文件路径时需要注意的问题
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
这一个属性。
作者:
J.晒太阳的猫
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
标签:
csharp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具