当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。