栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#绝对路径拼接相对路径的实例代码

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#绝对路径拼接相对路径的实例代码

做项目时发现Path.Combine方法只能支持傻瓜式的目录拼接

复制代码 代码如下:
//绝对路径
string absolutePath = @"C:Program FilesInternet Explorer";
//相对路径
string relativePath = @"..TestPath";
//预计拼接结果
string splicingResult = string.Empty;
Console.WriteLine(string.Format("Path.Combine("{0}","{1}")="{2}"", absolutePath, relativePath, Path.Combine(absolutePath, relativePath)));

输出结果为:

发现并没有按照想像的分辨出相对路径和绝对路径,所以只好用正则匹配了相对路径进行重新拼接,以下方法只支持绝对路径+相对路径的方式

//绝对路径
string absolutePath = @"C:Program FilesInternet Explorer";
//相对路径
string relativePath = @"..TestPath";
//预计拼接结果
string splicingResult = string.Empty;
Console.WriteLine(string.Format("Path.Combine("{0}","{1}")="{2}"", absolutePath, relativePath, Path.Combine(absolutePath, relativePath)));
if (!Path.IsPathRooted(relativePath))
{
    //匹配相对路径,匹配需要向上推的目录层数
    Regex regex = new Regex(@"^\|([..]+)");
    int backUp = regex.Matches(relativePath).Count;
    List pathes = absolutePath.Split("\".ToCharArray()).ToList();
    pathes.RemoveRange(pathes.Count - backUp, backUp);
    //匹配文件名,匹配需要附加的目录层数
    regex = new Regex(@"^\|([a-zA-Z0-9]+)");
    MatchCollection matches = regex.Matches(relativePath);
    foreach (Match match in matches)
    {
        pathes.Add(match.Value);
    }
    //驱动器地址取绝对路径中的驱动器地址
    pathes[0] = Path.GetPathRoot(absolutePath);
    foreach (string p in pathes)
    {
        splicingResult = Path.Combine(splicingResult, p);
    }
}
Console.WriteLine(string.Format("Absolute Path={0}",absolutePath));
Console.WriteLine(string.Format("Relative Path={0}", relativePath));
Console.WriteLine(string.Format("Path.Combine("{0}","{1}")="{2}"", absolutePath, relativePath, splicingResult));
Console.ReadLine();

输出结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/127557.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号