使用Path.Combine()在Windows系统上形成Linux路径

时间:2014-09-26 19:46:50

标签: c# path

我正在用C#编写一个应用程序,它将在Windows下编译和运行,但部分负责将文件上传到Linux服务器上的文件夹结构。在我的Windows应用程序中,我希望能够轻松地将Linux目录和文件名与Path.Combine结合使用。有没有办法用不同的路径分隔符暂时覆盖Path.Combine?

2 个答案:

答案 0 :(得分:2)

您应该做的是创建samba共享目录。

这样您就可以像访问Windows网络路径一样访问它。

var path = @"\\"+linuxHostname + @"\sambaShare\";

但是要回答你的问题,你不能改变Path.Combine斜线..也许字符串替换可以吗?

var linuxPath = winPath.Replace('\\','/');

答案 1 :(得分:1)

如果你只想要结合,那就有我的解决方案

public static string PathCombine(string pathBase, char separator = '/', params string[] paths)
{
    if (paths == null || !paths.Any())
        return pathBase;

    #region Remove path end slash
    var slash = new[] { '/', '\\' };
    Action<StringBuilder> removeLastSlash = null;
    removeLastSlash = (sb) =>
    {
        if (sb.Length == 0) return;
        if (!slash.Contains(sb[sb.Length - 1])) return;
        sb.Remove(sb.Length - 1, 1);
        removeLastSlash(sb);
    };
    #endregion Remove path end slash

    #region Combine
    var pathSb = new StringBuilder();
    pathSb.Append(pathBase);
    removeLastSlash(pathSb);
    foreach (var path in paths)
    {
        pathSb.Append(separator);
        pathSb.Append(path);
        removeLastSlash(pathSb);
    }
    #endregion Combine

    #region Append slash if last path contains
    if (slash.Contains(paths.Last().Last()))
        pathSb.Append(separator);
    #endregion Append slash if last path contains

    return pathSb.ToString();
}

有了这个,你可以打电话

PathCombine("/path", paths: new[]{"to", "file.txt"});
// return "/path/to/file.txt"
PathCombine(@"\\path", '\\', "to", "file.txt");
// return @"\\path\to\file.txt"
PathCombine("/some/bin:paths/bin", ':', "/another/path", "/more/path");
// return "/some/bin:paths/bin:/another/path:/more/path"