files
位于 base
包(package)。 说明
这些函数为计算机文件系统提供了低级接口。
用法
file.create(..., showWarnings = TRUE)
file.exists(...)
file.remove(...)
file.rename(from, to)
file.append(file1, file2)
file.copy(from, to, overwrite = recursive, recursive = FALSE,
copy.mode = TRUE, copy.date = FALSE)
file.symlink(from, to)
file.link(from, to)
参数
..., file1, file2 |
字符向量,包含文件名或路径。 |
from, to |
字符向量,包含文件名或路径。对于 |
overwrite |
逻辑性;是否应该覆盖现有的目标文件? |
showWarnings |
逻辑性;是否应该显示失败警告? |
recursive |
合乎逻辑的。如果 |
copy.mode |
逻辑:是否应该在可能的情况下复制文件权限位? |
copy.date |
逻辑:是否应尽可能保留文件日期?请参阅 |
细节
...
参数连接起来形成一个字符串:您可以单独指定文件或将其指定为一个向量。所有这些函数都会扩展路径名:请参阅path.expand
。 (file.exists
对于扩展后太长的路径默默地报告错误:其余的将发出警告。)
file.create
如果给定名称的文件尚不存在,则创建文件;如果存在,则截断它们。它们是使用“umask”设置(如果相关)允许的最大读/写权限创建的。默认情况下,如果操作失败,则会发出警告(并说明原因)。
file.exists
返回一个逻辑向量,指示由其参数命名的文件是否存在。 (这里‘exists’是指系统的stat
调用:仅当您拥有所需的权限时,文件才会被报告为存在stat
。还可以通过以下方式检查是否存在file.access
,它可能使用不同的权限并因此获得不同的结果。请注意,文件的存在并不意味着它是可读的:对于该用途file.access
.) ‘file’ 的构成取决于系统,但应包含目录。 (但是,在 Windows 上,目录名称不得包含尾部反斜杠或斜杠。)请注意,如果文件是类 Unix 上的符号链接,则结果指示链接是否指向实际文件,而不仅仅是链接是否存在。在 Windows 上,对于损坏的符号链接(连接),结果是不可靠的。最后,请注意不同的函数exists
它检查是否存在R对象。
file.remove
尝试删除其参数中指定的文件。在大多数 Unix 平台上‘file’ 包括空目录、符号链接、fifo 和套接字。在 Windows 上,‘file’ 表示常规文件,而不是空目录。
file.rename
尝试重命名文件(并且from
和to
必须具有相同的长度)。如果文件权限允许,这将覆盖 to
的现有元素。这受到操作系统相应系统调用的限制(在类似 Unix 上参见类似 man 2 rename
的内容):特别是在 ‘file’ 的解释中:大多数平台不会将文件从一个文件系统重命名为另一个文件系统。注意:这意味着将文件从临时目录重命名到用户的文件空间或在软件包安装期间通常会失败。 (在 Windows 上,file.rename
可以重命名文件,但不能跨卷重命名目录。)在允许重命名目录的平台上,通常 from
和 to
都必须是目录,如果 to
存在,则它必须是目录是一个空目录。
file.append
尝试将第二个参数命名的文件附加到第一个参数命名的文件中。这R下标回收规则用于对齐不同长度向量中给出的名称。
file.copy
其工作方式类似于file.append
但参数按复制的自然顺序排列。复制到现有目标文件将被跳过,除非overwrite = TRUE
。这to
参数可以指定单个现有目录。如果copy.mode = TRUE
文件读/写/执行权限在可能的情况下被复制,受“限制”base files2’。 (在 Windows 上,这仅适用于文件。)不会复制 ACL 等其他安全属性。在 POSIX 文件系统上,将复制符号链接的目标而不是链接本身,并且单独复制硬链接。使用copy.date = TRUE
可能会也可能不会准确地复制时间戳(例如,可以省略小数秒),但更有可能这样做R3.4.0。
file.symlink
和 file.link
在支持它们的文件系统上创建符号链接和硬链接。对于file.symlink
,to
参数可以指定单个现有目录。 (Unix 和 macOS 本机文件系统都支持两者。Windows 具有指向 NTFS 文件系统上的文件的硬链接以及与最新版本上的符号链接相关的概念:请参阅此帮助页面的 Windows 版本的以下部分。FAT 或 SMB 上会发生什么情况 -挂载的文件系统是特定于操作系统的。)
带有标记编码的文件参数(请参阅Encoding
,如果可能的话,会转换为本机编码,但在使用 Unicode 文件操作的 Windows 上除外(因此,标记为 UTF-8 可用于访问不在合适的本机编码中的文件路径)文件系统)。
值
这些函数返回一个逻辑向量,指示每个尝试的文件的操作成功。对文件或路径名使用缺失值将始终被视为失败。
如果 showWarnings = TRUE
、file.create
会针对意外失败发出警告。
不区分大小写的文件系统
不区分大小写的文件系统是 Windows 和 macOS 上的常态,但可以在所有操作系统上找到(例如 FAT 格式的 USB 驱动器可能不区分大小写)。
这些函数很可能会匹配现有文件,而不管此类文件系统上的大小写:然而,这是操作系统函数,文件名可能会映射为大写或小写。
警告
在包代码中使用这些函数时,请务必检查它们的返回值。这对于 file.rename
来说尤其重要,它具有特定于操作系统的限制(请注意,会话临时目录通常位于与工作目录不同的文件系统上):只能移植使用 file.rename
更改文件名( s) 在单个目录中。
例子
cat("file A\n", file = "A")
cat("file B\n", file = "B")
file.append("A", "B")
file.create("A") # (trashing previous)
file.append("A", rep("B", 10))
if(interactive()) file.show("A") # -> the 10 lines from 'B'
file.copy("A", "C")
dir.create("tmp")
file.copy(c("A", "B"), "tmp")
list.files("tmp") # -> "A" and "B"
setwd("tmp")
file.remove("A") # the tmp/A file
file.symlink(file.path("..", c("A", "B")), ".")
# |--> (TRUE,FALSE) : ok for A but not B as it exists already
setwd("..")
unlink("tmp", recursive = TRUE)
file.remove("A", "B", "C")
作者
Ross Ihaka, Brian Ripley
也可以看看
file.info
, file.access
, file.path
, file.show
, list.files
, unlink
, basename
, path.expand
。
Sys.glob
用于扩展文件规范中的通配符。
file_test
、Sys.readlink
(对于‘symlink’s)。
https://en.wikipedia.org/wiki/Hard_link and https://en.wikipedia.org/wiki/Symbolic_link for the concepts of links and their limitations.
相关用法
- R files2 目录和文件权限的操作
- R file.path 构造文件路径
- R file.info 提取文件信息
- R file.show 显示一个或多个文本文件
- R file.access 确定文件的可访问性
- R file.choose 交互式选择文件
- R findInterval 查找区间数或索引
- R find.package 查找套餐
- R formals 访问和操纵形式参数
- R funprog 函数式编程语言中常见的高阶函数
- R formatDL 格式说明列表
- R force 强制评估论证
- R format 以通用格式编码
- R factor 因子
- R function 函数定义
- R formatC 使用 C 样式格式进行格式化
- R format.pval 设置 P 值格式
- R forceAndCall 调用带有强制参数的函数
- R format.info 格式(.)信息
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
- R vector 向量 - 创建、强制等
- R lapply 对列表或向量应用函数
- R dump R 对象的文本表示
- R Sys.getenv 获取环境变量
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 File Manipulation。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。