zoukankan      html  css  js  c++  java
  • 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:Testzhang 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("
    英文路径");
        Test(file2);
    
        var file_protocol_1 = $"file:///{file1}";
        var file_protocol_2 = $"file:///{file2}";
    
        Console.WriteLine("
    带协议 中文路径");
        Test(file_protocol_1);
    
        Console.WriteLine("
    带协议 英文路径");
        Test(file_protocol_2);
    }
    
    private static void Test(string filePath)
    {
        Uri uri = new Uri(filePath);
        Console.WriteLine($"OriginalString {uri.OriginalString}
    {File.Exists(uri.OriginalString)}");
        Console.WriteLine($"AbsoluteUri {uri.AbsoluteUri}
    {File.Exists(uri.AbsoluteUri)}");
        Console.WriteLine($"AbsolutePath {uri.AbsolutePath}
    {File.Exists(uri.AbsolutePath)}");
        Console.WriteLine($"LocalPath {uri.LocalPath}
    {File.Exists(uri.LocalPath)}");
    }
    

    Demo 结论

    其实与语言无关,只要中间出现非英文字符,就会出现 URL 编码转义。

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

    原始字符串没有协议

    属性 File.Exist
    OriginalString C:Testzhang san est.txt true
    AbsoluteUri file:///C:/Test/zhang%20san/test.txt false
    AbsolutePath C:/Test/zhang%20san/test.txt false
    LocalPath C:Testzhang san est.txt true

    原始字符串带有协议

    属性 File.Exist
    OriginalString file:///C:Testzhang san est.txt false
    AbsoluteUri file:///C:/Test/zhang%20san/test.txt false
    AbsolutePath C:/Test/zhang%20san/test.txt false
    LocalPath C:Testzhang san est.txt true

    教训

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

    原文链接:
    https://www.cnblogs.com/jasongrass/p/12284564.html

  • 相关阅读:
    【js】js中的||和&&
    【jQuery】form表单元素序列化为json对象
    【jQuery】serializeArray()与serialize()的区别
    【jQuery】jquery-ui autocomplete智能提示
    【js】批量判断表单中的文本框非空
    【php】基础学习5
    【php】基础学习4
    【php】基础学习3
    SpringMVC与Struts2区别与比较总结
    iOS 改变UILabel部分颜色
  • 原文地址:https://www.cnblogs.com/jasongrass/p/12284564.html
Copyright © 2011-2022 走看看