来自Visual Studio中的Immediate Window:

> Path.Combine(@"C:\x", "y")
"C:\\x\\y"
> Path.Combine(@"C:\x", @"\y")
"\\y"

看起来它们应该是一样的.

旧的FileSystemObject.BuildPath()不是这样工作的...

推荐答案

这是一个哲学问题(也许只有微软才能真正回答),因为它完全按照文档所说的go 做.

System.IO.Path.Combine

如果path2包含绝对路径,此方法将返回path2.

Here's the actual Combine method美元.净来源.您可以看到它调用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;
}

我不知道理由是什么.我猜解决方案是从第二条路径的开始剥离(或修剪)DirectorySpeparatorChar;也许可以编写自己的Combine方法来实现这一点,然后调用Path.Combine().

.net相关问答推荐

Azure Function应用程序-如何升级.NET运行时

无法对.NET MAUI类库进行单元测试

有没有更好的方法使用 Pusher Channels 的批事件发布消息?

从 Contentful 中的富文本元素中获取价值?

仅在有换行符时捕获分隔符之间的所有文本

如何知道变量是否只是指向另一个对象的pointer或者它是否可以独立存在

如何规范机器之间连字符的排序顺序?

如何在 WPF 中创建/制作圆角按钮?

C# 的 Actors 有什么好的实现吗?

有没有办法只在 C# 中设置一次属性

在 .NET 中填充整数列表

SQLParameter 如何防止 SQL 注入?

.NET 的 String.Normalize 有什么作用?

如何在 RabbitMQ 中设置重试次数?

如何使用 Entity Framework Code First CTP 5 存储图像?

SqlBulkCopy 的推荐批量大小是多少?

任何人都知道缺少枚举通用约束的好方法吗?

NServiceBus 与 MassTransit

App.config:用户与应用程序范围

嵌套捕获组如何在正则表达式中编号?