C#計(jì)算兩個(gè)文件的相對目錄算法的實(shí)例代碼
樓主大菜鳥一只,第一次寫技術(shù)博客,如果有概念錯(cuò)誤或代碼不規(guī)范的地方,還請各位多多批評指正。話不多說,來看題:
前一陣子開發(fā)了一個(gè)用戶控件,里面調(diào)用了很多css,js等資源文件,而引用控件的頁面所在目錄是不同的。問題出來了:如果目錄不同,那么控件里引用css,js資源文件的路徑也會相應(yīng)變化?,F(xiàn)在已知兩個(gè)文件相對于網(wǎng)站根目錄的路徑,如何計(jì)算相對路徑呢?請看代碼:
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;
//兩個(gè)目錄最底層的共用目錄索引
int closestRootIndex = -1;
for (int i = 0; i < s; i++)
{
if (path1Array[i] == path2Array[i])
{
closestRootIndex = i;
}
else
{
break;
}
}
//由path1計(jì)算 ‘../'部分
string path1Depth = "";
for (int i = 0; i < path1Array.Length; i++)
{
if (i > closestRootIndex + 1)
{
path1Depth += "../";
}
}
//由path2計(jì)算 ‘../'后面的目錄
string path2Depth = "";
for (int i = closestRootIndex + 1; i < path2Array.Length; i++)
{
path2Depth += "/" + path2Array[i];
}
path2Depth = path2Depth.Substring(1);
return path1Depth + path2Depth;
}
我的算法,第一步算出兩個(gè)目錄的最底層父目錄,第二步算出目錄1需要向上級目錄返回次數(shù)(../個(gè)數(shù)),第三步算出最底層父目錄到目錄2的相對路徑,第四步把第二步和第三步的結(jié)果相加就是我們要的答案了。
調(diào)用部分:
string path1 = "/Manage/Permissions/RoleManage.aspx";
string path2 = "/Manage/plugin/jquery-easyui/jquery.easyui.min.js";
string result = GetRelativePath(path1, path2);
得到結(jié)果:../plugin/jquery-easyui/jquery.easyui.min.js
相關(guān)文章
基于WPF實(shí)現(xiàn)帶明細(xì)的環(huán)形圖表
這篇文章主要介紹了如何利用WPF繪制帶明細(xì)的環(huán)形圖表?,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2022-08-08C# 16進(jìn)制與字符串、字節(jié)數(shù)組之間的轉(zhuǎn)換
在串口通訊過程中,經(jīng)常要用到 16進(jìn)制與字符串、字節(jié)數(shù)組之間的轉(zhuǎn)換2009-05-05C#代碼實(shí)現(xiàn)短信驗(yàn)證碼接口示例
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)短信驗(yàn)證碼接口示例代碼,感興趣的小伙伴們可以參考一下2016-08-08C# Dynamic關(guān)鍵字之:解析dynamic就是Object
本篇文章是對C#中dynamic關(guān)鍵字就是Object進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C# Winform中實(shí)現(xiàn)主窗口打開登錄窗口關(guān)閉的方法
這篇文章主要介紹了C# Winform中實(shí)現(xiàn)主窗口打開登錄窗口關(guān)閉的方法,這在需要用戶名密碼的軟件項(xiàng)目中是必用的一個(gè)技巧,要的朋友可以參考下2014-08-08C#實(shí)現(xiàn)的簡單隨機(jī)數(shù)產(chǎn)生器功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)的簡單隨機(jī)數(shù)產(chǎn)生器功能,涉及C#簡單界面布局、事件響應(yīng)及隨機(jī)數(shù)生成相關(guān)操作技巧,需要的朋友可以參考下2017-09-09