C# 将两个文件路径合并

将一个绝对路径,使用相对路径后得到新的绝对路径

void Main()
{
    var originPath = "D:/temp/a/";
    var p0 = "";
    var p1 = "./";
    var p2 = "../../data/";
    var p3 = "D:/data/";
    
    ResolveRelativeToAbsolutePath(originPath,p0).Dump();//->D:/temp/a/
    ResolveRelativeToAbsolutePath(originPath,p1).Dump();//->D:/temp/a/
    ResolveRelativeToAbsolutePath(originPath,p2).Dump();//->D:/data/
    ResolveRelativeToAbsolutePath(originPath,p3).Dump();//->D:/data/
}


/// <summary>
/// 将相对路径转为绝对路径
/// </summary>
/// <param name="originPath"></param>
/// <param name="newPath"></param>
/// <returns></returns>
public static string ResolveRelativeToAbsolutePath(string originPath, string newPath)
{
    if(string.IsNullOrWhiteSpace(newPath))return originPath;
    originPath = originPath.Replace("\\", "/").TrimEnd('/') + "/";
    newPath = newPath.Replace("\\", "/").TrimEnd('/') + "/";
    if (!newPath.StartsWith("."))
    {
        return newPath;
    }
    string[] originPathArray = originPath.Split("/").Where(p => !string.IsNullOrEmpty(p)).ToArray();
    string[] newPathArray = newPath.Split("/").Where(p => !string.IsNullOrEmpty(p)).ToArray();
    int originPathArrayLength = originPathArray.Length;
    int newPathArrayLength = newPathArray.Length;

    int i = 0;
    for (; i < newPathArrayLength; i++)
    {
        if (newPathArray[i] == ".")
        {
            continue;
        }
        else if (newPathArray[i] == "..")
        {
            if (originPathArrayLength > 0 && !originPathArray[originPathArrayLength - 1].EndsWith(":"))
            {
                originPathArrayLength--;
            }
            else
            {
                break;
            }
        }
        else
        {
            break;
        }
    }
    originPathArray = originPathArray.Take(originPathArrayLength).ToArray();
    newPathArray = newPathArray.Skip(i).ToArray();
    var path = string.Join("/", originPathArray) + "/" + string.Join("/", newPathArray);
    if(!path.EndsWith("/")) path +="/";
    return path;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容