您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么Path.Combine无法正确连接以Path.DirectorySeparatorChar开头的文件名?

为什么Path.Combine无法正确连接以Path.DirectorySeparatorChar开头的文件名?

这是一个哲学问题(也许只有Microsoft才能真正回答),因为它确实在按照文档中的说明进行操作。

System.IO.Path.Combine

“如果path2包含绝对路径,则此方法返回path2。”

这是来自.NET源的实际Combine方法。您可以看到它调用CombineNoChecks,然后在path2上调用IsPathRooted,并在返回路径时返回该路径:

public static String Combine(String path1, String path2) {
    if (path1==null || path2==null)
        throw new ArgumentNullException((path1==null) ? "path1" : "path2");
    Contract.EndContractBlock();
    CheckInvalidPathChars(path1);
    CheckInvalidPathChars(path2);

    return CombineNoChecks(path1, path2);
}

internal static string CombineNoChecks(string path1, string path2)
{
    if (path2.Length == 0)
        return path1;

    if (path1.Length == 0)
        return path2;

    if (IsPathRooted(path2))
        return path2;

    char ch = path1[path1.Length - 1];
    if (ch != DirectorySeparatorChar && ch != AltDirectorySeparatorChar &&
            ch != VolumeSeparatorChar) 
        return path1 + DirectorySeparatorCharAsString + path2;
    return path1 + path2;
}

我不知道这是什么理由。我猜解决方案是从第二条路径的开头剥离(或修剪)DirectorySeparatorChar。也许编写自己的Combine方法来执行该操作,然后调用Path.Combine()。

其他 2022/1/1 18:21:04 有477人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶