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

标签 c# path

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

最佳答案

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

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"

关于c# - 在 Windows 系统上使用 Path.Combine() 形成 Linux 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26067224/

相关文章:

c# - 不同线程访问 MemoryStream

path - 包含完整文件名的路径名?

linux - vim 和 sudo 可执行文件的路径

c# - 连接到网络套接字

c# - Django与C#桌面应用程序的接口(interface)

c# - 这个正则表达式是什么意思

path - brew : Consider setting your PATH so that/usr/local/bin occurs before/usr/bin

arrays - JMeter:如何使用 jsonpath 计算数组中的 JSON 对象

java - wicket:根据请求将不同的路径映射到同一类以在标记中生成不同的内容

c# - 如何从抽象父类(super class)中引用子类的字段?