當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R normalizePath 以規範形式表達文件路徑


R語言 normalizePath 位於 base 包(package)。

說明

將文件路徑轉換為平台的規範形式,以 user-understandable 形式顯示它們,以便可以比較相對路徑和絕對路徑。

用法

normalizePath(path, winslash = "\\", mustWork = NA)

參數

path

文件路徑的字符向量。

winslash

Windows 上使用的分隔符 - 在其他地方被忽略。必須是 c("/", "\\") 之一。

mustWork

邏輯:如果TRUE,則如果無法確定結果,則給出錯誤;如果NA則警告。

細節

Tilde-expansion (參見 path.expand )首先在 paths 上完成。

在類 Unix 平台支持的地方,它會嘗試將路徑轉換為規範形式的絕對路徑(無‘⁠./⁠', '⁠../⁠’也不是符號鏈接)。它依賴於POSIX係統函數realpath:如果平台沒有(我們知道當前沒有示例),那麽結果將是絕對路徑,但可能不是規範的。甚至在哪裏realpath使用規範路徑不必是唯一的,例如通過硬鏈接或多個安裝。

在 Windows 上,它將相對路徑轉換為絕對路徑,解析符號鏈接,將路徑元素的短名稱轉換為長名稱,並確保分隔符是由winslash。它將匹配每個路徑元素 case-insensitively 或在通常的名稱查找過程中區分大小寫,並返回規範的大小寫。它依賴於Windows API函數GetFinalPathNameByHandle如果出現錯誤(例如權限不足),它當前會回退到R3.6(及更早版本)的實現,依賴於GetFullPathNameGetLongPathName具有注釋部分中說明的限製。嘗試在存在映射驅動器或符號鏈接的情況下不引入 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-devel大神的英文原創作品 Express File Paths in Canonical Form。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。