相對路徑 與 絕對路徑之間的轉換

2021-05-23 18:49:32 字數 1061 閱讀 6072

1. 字串解析

這種方式就是要通過路徑的規則對路徑字串是行處理,這種方式是效能最好的一種方式,但實現起來比較麻煩。

2. 使用現成api

在windows系統中可以通過api函式etfullpathname() 和pathrelativepathto()進行轉換

而在linux/unix系統中沒有類似函式(至少我現在還沒有發現),但是可以通過一些技巧實現,相對路徑轉絕對路徑的偽碼如下:

1: cwd = getcwd( );       // backup

2: chdir(relpath);          

3: abspath = getcwd( );

4: chdir( cwd);              // restore

該方法可以跨平台,但是有乙個缺陷,就是在第2步和第4步之間可能出現競爭,因為此時程式的當前工作目錄被置到乙個未知的目錄,在多執行緒環境中如果存在依賴當前工作目錄的行為,可能產生不可預知的結果。這種方式如果是在單執行緒環境下工作是安全的,如果是在多執行緒環境,並且併發程度不是很高的情況下也可以使用,但存在風險。

而對於絕對路徑到相對路徑的轉換,暫時還沒有類似的方法。

3.使用命令列

通過管道popen/pclose執行一些shell命令,也可以達到相對路徑到絕對路徑的轉換,偽碼如下:

1: pf = popen(「cd relpath;pwd」);

2: abspath = fgets( pf );

3: pclose(pf);

這種方法其實與第2種的原理是相同的,但是解決了第二種存在競爭風險的問題,但犧牲了一些效能,因為這種方法是通過產生新的程序來實現的,程序的產生與銷毀代價是比較高的。該方法的另乙個缺陷是跨平台問題,只能在unix/linux系統上使用,不能在windows平台上使用。

這三種方法各有優缺點,如果對軟體可性、效能要求比較高的情況下還是使用方法1比較好,當然成本也是最高的。如果僅在unix/linux平台上使用,則推薦使用第3種方法,雖然犧牲了一些效能,但它可以保證軟體的行為的可控性;如果要求跨平台,第3種方法就不如第2種方法了,它保證了**的可移植,但需要注意避開競爭條件。

相對路徑與絕對路徑

相對路徑 以引用檔案之網頁所在位置為參考基礎,而建立出的目錄路徑。因此,當儲存於不同目錄的網頁引用同乙個檔案時,所使用的路徑將不相同,故稱之為相對。絕對路徑 以web站點根目錄為參考基礎的目錄路徑。之所以稱為絕對,意指當所有網頁引用同乙個檔案時,所使用的路徑都是一樣的。其實絕對路徑與相對路徑的不同處...

相對路徑與絕對路徑

相對路徑與絕對路徑 絕對路徑 舉例.c盤中windows目錄中system32中的ias資料夾,即c windows system32 ias 相對路徑 舉例。c盤中windows目錄中system32中的ias資料夾和c盤中windows目錄中system32中的0409資料夾,ias相對於040...

絕對路徑與相對路徑

無論是在windows還是linux作業系統下,絕對路徑和相對路徑都是很重要的概念,也是許多初學者迷惑的地方,下面我們就這兩個概念進行介紹。絕對路徑 由根目錄 開始寫起的檔名或者目錄名稱,例如 home student 相對路徑 相對於目前路徑的檔名寫法。例如.home student或者.home...