C#绝对路径拼接相对路径的实例代码
C#绝对路径拼接相对路径的实例代码
发布时间:2016-12-28 来源:查字典编辑
摘要:做项目时发现Path.Combine方法只能支持傻瓜式的目录拼接复制代码代码如下://绝对路径stringabsolutePath=@"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)));

输出结果为:

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

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

//绝对路径

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<string> 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();

输出结果:

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类