前一陣子開發了一個用戶控件,里面調用了很多css,js等資源文件,而引用控件的頁面所在目錄是不同的。問題出來了:如果目錄不同,那么控件里引用css,js資源文件的路徑也會相應變化。現在已知兩個文件相對于網站根目錄的路徑,如何計算相對路徑呢?請看代碼:
public string GetRelativePath(string path1, string path2)
{
string[] path1Array = path1.Split('/');
string[] path2Array = path2.Split('/');
//
int s = path1Array.Length >= path2Array.Length ? path2Array.Length : path1Array.Length;
//兩個目錄最底層的共用目錄索引
int closestRootIndex = -1;
for (int i = 0; i < s; i++)
{
if (path1Array[i] == path2Array[i])
{
closestRootIndex = i;
}
else
{
break;
}
}
//由path1計算 ‘../'部分
string path1Depth = "";
for (int i = 0; i < path1Array.Length; i++)
{
if (i > closestRootIndex + 1)
{
path1Depth += "../";
}
}
//由path2計算 ‘../'后面的目錄
string path2Depth = "";
for (int i = closestRootIndex + 1; i < path2Array.Length; i++)
{
path2Depth += "/" + path2Array[i];
}
path2Depth = path2Depth.Substring(1);
return path1Depth + path2Depth;
}
我的算法,第一步算出兩個目錄的最底層父目錄,第二步算出目錄1需要向上級目錄返回次數(../個數),第三步算出最底層父目錄到目錄2的相對路徑,第四步把第二步和第三步的結果相加就是我們要的答案了。