You need to enable JavaScript to run this app. Linux系统下如何使用UriBuilder处理文件路径
优惠活动
大模型
产品
解决方案
定价
更多

Linux系统下如何使用UriBuilder处理文件路径

问题根因

UriBuilder单字符串入参的构造函数,默认会优先按网络URI规则解析输入内容:

  • Windows下带盘符前缀的路径会被自动识别为本地文件路径,自动补全file:///协议头,所以可以正常解析
  • Linux下/开头的绝对路径没有明确的协议标识,构造函数会尝试按[scheme]://[hostname]/[path]的格式解析,自然找不到合法主机名,抛出格式异常

你直接传入未指定UriKind的Uri对象时报错,是因为构造Uri时如果没有明确指定路径类型,运行时无法判断你的输入是相对路径还是绝对路径,就会返回UriKind.RelativeOrUnknown的状态,传给UriBuilder时就触发格式校验失败。

可行解决方法
  • 明确指定路径类型构造Uri后再传入UriBuilder
using System;
                    
public class Program
{
    public static void Main()
    {
        // 构造Uri时明确指定是绝对路径
        var fileUri = new Uri("/path/to/file", UriKind.Absolute);
        var b = new UriBuilder(fileUri);
        Console.WriteLine(b.ToString());
        // 输出:file:///path/to/file
    }
}
  • 直接给路径补全file协议前缀
var b = new UriBuilder($"file://{"/path/to/file"}");
  • 如果仅需处理本地文件路径、不需要URI结构,优先用跨平台兼容的Path类操作,避免URI校验逻辑的额外限制
// 规范化本地路径
string normalizedPath = Path.GetFullPath("/path/to/file");
Console.WriteLine(normalizedPath);
// Linux下输出:/path/to/file
// Windows下输出对应磁盘下的全路径

内容的提问来源于stack exchange,提问作者Shadow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 06:00:00