using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string sourcePath = "/u01/xib_local/wgq/";
string targetPath = "/u01/xib_local/wgq/pgm/";
System.Console.WriteLine("sourcePath:{0},targetPath:{1},relativePath:{2}", sourcePath, targetPath, GetRelativePath(sourcePath, targetPath));
System.Console.ReadLine();
}
/// <summary>
/// 获取相对路径,目标绝对路径相对源绝对路径的相对路径
/// </summary>
/// <param name="sourcePath">源绝对路径</param>
/// <param name="targetPath">目标绝对路径</param>
/// <returns>为空说明两者路径一致</returns>
static string GetRelativePath(string sourcePath, string targetPath)
{
string relativePath = "";
//获得数组
string[] sourcePathArray = sourcePath.Split("/".ToCharArray());
string[] targetPathArray = targetPath.Split("/".ToCharArray());
//标志位初始值置为true
bool isSame = true;
//获取最大长度
int maxLength = sourcePathArray.Length > targetPathArray.Length ? (sourcePathArray.Length - 1) : (targetPathArray.Length - 1);
for (int i = 0; i < maxLength; i++)
{
if (i >= targetPathArray.Length - 1)
{
//sourcePathArray长度较小
relativePath = "../" + relativePath;
}
else if(i >= sourcePathArray.Length - 1)
{
//targetPathArray长度较小
relativePath = relativePath + targetPathArray[i] + "/";
}
else
{
if (isSame && !sourcePathArray[i].Equals(targetPathArray[i]))
{
//isSave 从 true 变false
isSame = false;
}
if (!isSame)
{
//相对路径赋值
relativePath = "../" + relativePath + targetPathArray[i] + "/";
}
else
{
//否则继续循环
continue;
}
}
}
return relativePath;
}
}
}