如何從GNU/Linux上的C/C++中的給定相對路徑中確定文件或目錄的絕對路徑?我知道realpath()
,但它不適用於不存在的文件。如何獲得文件或目錄的絕對路徑,即* not * exists?
假設用戶輸入../non-existant-directory/file.txt
,程序工作目錄爲/home/user/
。
我需要的是一個返回/home/non-existant-directory/file.txt
的函數。
我需要此功能來檢查給定的路徑是否在某個子目錄中。
如何從GNU/Linux上的C/C++中的給定相對路徑中確定文件或目錄的絕對路徑?我知道realpath()
,但它不適用於不存在的文件。如何獲得文件或目錄的絕對路徑,即* not * exists?
假設用戶輸入../non-existant-directory/file.txt
,程序工作目錄爲/home/user/
。
我需要的是一個返回/home/non-existant-directory/file.txt
的函數。
我需要此功能來檢查給定的路徑是否在某個子目錄中。
嘗試realpath
。如果失敗,則開始從最後一個路徑組件中刪除路徑組件,然後重試realpath
,直到成功爲止。然後將刪除的組件添加回成功的realpath
調用的結果。
如果您確定包含的目錄存在,並且您只想在其中創建文件,則只需刪除至多一個組件。
另一種方法是將創建爲文件先,然後調用realpath
。
第一個解決方案工作,謝謝! –
你可以得到當前目錄和應用以下邏輯:如果路徑以「/」,根
取代當前目錄的相對路徑上提到的每個目錄開始
執行以下:
如果您在相對路徑的最後一部分,它附加到當前目錄的路徑,並停止:當前目錄的路徑是絕對路徑。
否則:檢查當前目錄下是否存在這樣的目錄。
如果它確實存在,但不是目錄,信號錯誤(除非路徑中的最後一項)
如果它確實存在,它是一個目錄,看它是否是一個符號鏈接(在支持此功能的操作系統上)。如果是,則將當前目錄替換爲符號鏈接的指向目錄。
如果它確實存在,而且它是一個目錄,而不是一個符號鏈接,該目錄到當前目錄的路徑追加(即選中的子目錄替換當前目錄)
如果沒有存在時,將相對路徑的其餘部分附加到當前目錄的路徑並停止。
這基本上是自己重新實現'realpath',並且比你需要做更多的工作。 –
我不認爲像這樣的東西存在內置。你將不得不自己寫代碼。 –