normalizePath
位於 base
包(package)。 說明
將文件路徑轉換為平台的規範形式,以 user-understandable 形式顯示它們,以便可以比較相對路徑和絕對路徑。
用法
normalizePath(path, winslash = "\\", mustWork = NA)
參數
path |
文件路徑的字符向量。 |
winslash |
Windows 上使用的分隔符 - 在其他地方被忽略。必須是 |
mustWork |
邏輯:如果 |
細節
Tilde-expansion (參見 path.expand
)首先在 paths
上完成。
在類 Unix 平台支持的地方,它會嘗試將路徑轉換為規範形式的絕對路徑(無‘./', '../’也不是符號鏈接)。它依賴於POSIX係統函數realpath
:如果平台沒有(我們知道當前沒有示例),那麽結果將是絕對路徑,但可能不是規範的。甚至在哪裏realpath
使用規範路徑不必是唯一的,例如通過硬鏈接或多個安裝。
在 Windows 上,它將相對路徑轉換為絕對路徑,解析符號鏈接,將路徑元素的短名稱轉換為長名稱,並確保分隔符是由winslash
。它將匹配每個路徑元素 case-insensitively 或在通常的名稱查找過程中區分大小寫,並返回規範的大小寫。它依賴於Windows API函數GetFinalPathNameByHandle
如果出現錯誤(例如權限不足),它當前會回退到R3.6(及更早版本)的實現,依賴於GetFullPathName
和GetLongPathName
具有注釋部分中說明的限製。嘗試在存在映射驅動器或符號鏈接的情況下不引入 UNC 路徑:如果GetFinalPathNameByHandle
返回 UNC 路徑,但是GetLongPathName
返回以驅動器號開頭的路徑,R 回退到R3.6(及更早版本)實施。可以使用在當前區域設置中無效的 UTF-8 編碼路徑。
mustWork = FALSE
對於表達消息中使用的路徑很有用。
值
字符向量。
如果輸入不是真實路徑,則結果取決於係統(除非 mustWork = TRUE
,此時這應該是一個錯誤)。它將是相應的輸入元素或將其轉換為絕對路徑。
由於多種原因,轉換為絕對文件路徑可能會失敗。最常見的是
-
文件路徑的多個組成部分之一不存在。
-
最後一個之前的組件不是目錄,或者沒有足夠的權限讀取該目錄。
-
對於相對路徑,無法確定當前目錄。
-
符號鏈接指向不存在的位置或鏈接形成循環。
-
規範化路徑將超過文件路徑支持的最大長度。
注意
路徑的規範形式可能不是您所期望的。例如,在 macOS 上絕對路徑,例如“/tmp' 和 '/var' 是符號鏈接。在 Linux 上,由 bash 進程替換生成的路徑是符號鏈接(例如‘/proc/fd/63’)到管道,並且這種路徑沒有規範形式。在R在 Windows 3.6 及更早版本中,將不會解析符號鏈接,並且將返回路徑元素的長名稱及其所在大小寫path
,這在不區分大小寫的文件夾中可能不規範。
例子
# random tempdir
cat(normalizePath(c(R.home(), tempdir())), sep = "\n")
相關用法
- R norm 計算矩陣的範數
- R noquote “無引號”字符串打印類
- R numeric 數值向量
- R numeric_version 數字版本
- R ns-dblcolon 雙冒號和三冒號運算符
- R nargs 函數的參數數量
- R ns-internals 命名空間內部結構
- R ns-reflect 命名空間反射支持
- R ns-hooks 命名空間事件的鉤子
- R nchar 計算字符數(或字節數或寬度)
- R ns-load 加載和卸載命名空間
- R name 名稱和符號
- R nrow 數組的行/列數
- R names 對象的名稱
- R ns-topenv 頂級環境
- R nlevels 因子的水平數
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
- R rank 樣本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Express File Paths in Canonical Form。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。