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...