在C#中,如何同时组合文件路径的两个以上部分?

时间:2010-01-03 20:15:29

标签: c# path relative-path

要组合文件路径的两个部分,您可以执行

System.IO.Path.Combine (path1, path2);

然而,你做不到

System.IO.Path.Combine (path1, path2, path3);

有一种简单的方法吗?

5 个答案:

答案 0 :(得分:31)

以下是您可以使用的实用方法:

public static string CombinePaths(string path1, params string[] paths)
{
    if (path1 == null)
    {
        throw new ArgumentNullException("path1");
    }
    if (paths == null)
    {
        throw new ArgumentNullException("paths");
    }
    return paths.Aggregate(path1, (acc, p) => Path.Combine(acc, p));
}

替代代码 - 高尔夫版本(更短但不太清晰,语义与Path.Combine略有不同):

public static string CombinePaths(params string[] paths)
{
    if (paths == null)
    {
        throw new ArgumentNullException("paths");
    }
    return paths.Aggregate(Path.Combine);
}

然后您可以将其称为:

string path = CombinePaths(path1, path2, path3);

答案 1 :(得分:23)

正如其他人所说,在.NET 3.5及更早版本中,没有办法完全做到这一点 - 您必须编写自己的Combine方法或多次调用Path.Combine

但欢欣鼓舞 - 因为在.NET 4.0中,有this overload

public static string Combine(
    params string[] paths
)

还有重载需要3或4个字符串,大概是因为它不需要为常见情况不必要地创建数组。

希望Mono很快就能解决这些超载问题 - 我相信它们很容易实现并且非常受欢迎。

答案 2 :(得分:4)

不 - 你必须多次致电Path.Combine()

你可以编写一个帮助你的辅助方法:

public static string CombinePaths(params string[] paths) {
    if (paths == null) {
        return null;
    }
    string currentPath = paths[0];
    for (int i = 1; i < paths.Length; i++) {
        currentPath = Path.Combine(currentPath, paths[i]);
    }
    return currentPath;
}

答案 3 :(得分:4)

不简单,但聪明:)

string str1 = "aaa", str2 = "bbb", str3 = "ccc";
string comb = new string[] { str1, str2, str3 }
    .Aggregate((x, y) => System.IO.Path.Combine(x, y));

或者:

string CombinePaths(params string[] paths)
{
    return paths.Aggregate((x,y) => System.IO.Path.Combine(x, y));
}

答案 4 :(得分:0)

使用.NET 4 Path.Combine(string [])

中引入的方法重载
Path.Combine(new [] { "abc", "def", "ghi", "jkl", "mno" });