日期:2014-05-19  浏览次数:20697 次

给定两个目录的绝对路径后,如何算出它们之间的相对路径?
如题,现有目录路径A和目录路径B,如何算出B相对于A的位置?(假定A与B都处于同分区下)

------解决方案--------------------
应该可以吧……

D:\abc\def\ghi
D:\abc\opq\rst

做字符串分割操作(\)
上面得到字符串数组A
0 D:
1 abc
2 def
3 ghi
下面得到字符串数组B
0 D:
1 abc
2 opq
3 rst
然后比较嘛……

先找出一样的到哪里
如上面找到1 abc
那么B相对于A的路径就是
B[2] - B[3] 两个..\ (我记得上级目录是这样表示)
再加上A[2] + "\ " + A[3]

大概这样能实现吧……
------解决方案--------------------
string patha= "C:\\aaa\\bbb ";
string pathb= "C:\\aaa\\bbb\\ccc\\ddd\\eee\\fff ";
pathb = pathb.Replace(patha + "\\ ", " ");
string temp = pathb.Replace( "\\ ", " ");
int n = pathb.Length - temp.Length;
pathb = pathb.Substring(pathb.LastIndexOf( "\\ ")+1);
for (int i = 0; i < n; i++)
{
pathb = "..\\ " + pathb;
}
Console.WriteLine( "pathb的相对路径是: "+pathb);

编译通过...
------解决方案--------------------
什么叫相对位置啊
是不是
string A = @ "C:\a\b\c ";
string B = @ "C:\a\b ";
B相对于A的位置: @ "..\ "

string B = @ "C:\a\b\c ";
string A = @ "C:\a\b ";
B相对于A的位置: @ "\c "

这样的话,代码如下

string A = @ "C:\a\b\c ";
string B = @ "C:\a\b ";
string temp = " ";
string[] a = A.Split( '\\ ');
string[] b = B.Split( '\\ ');

if (a.Length > b.Length)
{
int n = a.Length - b.Length;
for (int i = 0; i < n; i++)
{
temp += @ "..\ ";
}
}
else
temp = B.Replace(A, " ");

temp即所求
------解决方案--------------------
提个思路,将两路径前面的相同部分截去,假设是求A目录相对于B目录的路径,将B目录绝对路径字符串经过前面截取操作后剩下的部分,每一级目录用替换成 ..\ ,最后加上A目录绝对路径字符串经过前面截取操作后剩下的部分,这就是该相对路径了