如何根據乙個絕對檔案路徑生成乙個相對檔案路徑

2022-01-15 13:29:16 字數 1530 閱讀 7402

日常的開發中,獲取絕對檔案路徑才是主流吧!連path.getfullpath這種生成絕對路徑的方法都已經成為 .net standard 的一部分了。

然而,生成相對路徑依然有用——比如你的配置檔案是相對於工作目錄的,必須這個路徑是輸出給使用者看的……

那麼,既然path沒有生成相對路徑的方法,還能怎麼生成相對路徑呢?別跟我說自己去做字串比較……

uri卻提供了makerelativeuri方法,可以生成乙個路徑到另乙個路徑的相對路徑。於是我們可以寫出這樣的**:

public

static

string

makerelativepath(string frompath, string topath)

執行傳入c:\users\walterlv\opensource\democ:\users\walterlv\opensource\demo\build\config.xml。結果,竟然得到的相對路徑是:demo/build/config.xml

那個demo明明是兩者共有的路徑部分,卻存在於相對路徑中;

生成的路徑使用/,而不是 windows 系統使用的\

於是我們需要分別進行這兩個處理。對於前者,我們必須讓uri意識到這是乙個資料夾才能讓最終生成的路徑不帶這個重複的部分;對於後者,我們需要進行路徑連線符轉換。於是最終的**我整理成了如下方法:

public

static

string

makerelativepath(string frompath, string topath)

if (fromuri.scheme.equals("file", stringcomparison.invariantcultureignorecase)

&& !frompath.endswith("/") && !frompath.endswith("\\"))

var relativeuri = fromuri.makerelativeuri(touri);

var relativepath = uri.unescapedatastring(relativeuri.tostring());

if (touri.scheme.equals("file", stringcomparison.invariantcultureignorecase))

return relativepath;

}

現在重新傳入c:\users\walterlv\opensource\democ:\users\walterlv\opensource\demo\build\config.xml。結果,已經能夠得到:build\config.xml了。

參考資料

根據模板檔案生成乙個靜態html檔案的類

根據模板檔案生成乙個靜態html檔案的類一般我們用php輸出乙個html檔案,總是用 head 這樣乙個長串來完成。本類主要提供乙個簡便的用php輸出html檔案的方法。避免了在程式中出現過多的帶有長字串。類定義檔案 createhtml.class.php 如下 定義所需工作函式 約定以標記 為開...

根據模板檔案生成乙個靜態html檔案的類

根據模板檔案生成乙個靜態html檔案的類一般我們用php輸出乙個html檔案,總是用 head 這樣乙個長串來完成。本類主要提供乙個簡便的用php輸出html檔案的方法。避免了在程式中出現過多的帶有長字串。類定義檔案createhtml.class.php 如下 定義所需工作函式 約定以標記為開始 ...

寫了乙個wwwscan的路徑生成工具

drupal 6.22 htaccess drupal 6.22 changelog.txt drupal 6.22 cron.php drupal 6.22 index.php drupal 6.22 install.mysql.txt drupal 6.22 install.pgsql.txt ...