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


R files 文件操作


R语言 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

字符向量,包含文件名或路径。对于file.copyfile.symlinkto 也可以是单个现有目录的路径。

overwrite

逻辑性;是否应该覆盖现有的目标文件?

showWarnings

逻辑性;是否应该显示失败警告?

recursive

合乎逻辑的。如果to是一个目录,是否应该复制from中的目录(及其内容)? (如 POSIX 操作系统上的 cp -R。)

copy.mode

逻辑:是否应该在可能的情况下复制文件权限位?

copy.date

逻辑:是否应尽可能保留文件日期?请参阅Sys.setFileTime

细节

... 参数连接起来形成一个字符串:您可以单独指定文件或将其指定为一个向量。所有这些函数都会扩展路径名:请参阅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 尝试重命名文件(并且fromto 必须具有相同的长度)。如果文件权限允许,这将覆盖 to 的现有元素。这受到操作系统相应系统调用的限制(在类似 Unix 上参见类似 man 2 rename 的内容):特别是在 ‘file’ 的解释中:大多数平台不会将文件从一个文件系统重命名为另一个文件系统。注意:这意味着将文件从临时目录重命名到用户的文件空间或在软件包安装期间通常会失败。 (在 Windows 上,file.rename 可以重命名文件,但不能跨卷重命名目录。)在允许重命名目录的平台上,通常 fromto 都必须是目录,如果 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.symlinkfile.link 在支持它们的文件系统上创建符号链接和硬链接。对于file.symlinkto 参数可以指定单个现有目录。 (Unix 和 macOS 本机文件系统都支持两者。Windows 具有指向 NTFS 文件系统上的文件的硬链接以及与最新版本上的符号链接相关的概念:请参阅此帮助页面的 Windows 版本的以下部分。FAT 或 SMB 上会发生什么情况 -挂载的文件系统是特定于操作系统的。)

带有标记编码的文件参数(请参阅Encoding,如果可能的话,会转换为本机编码,但在使用 Unicode 文件操作的 Windows 上除外(因此,标记为 UTF-8 可用于访问不在合适的本机编码中的文件路径)文件系统)。

这些函数返回一个逻辑向量,指示每个尝试的文件的操作成功。对文件或路径名使用缺失值将始终被视为失败。

如果 showWarnings = TRUEfile.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

dir.create

Sys.glob 用于扩展文件规范中的通配符。

file_testSys.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-devel大神的英文原创作品 File Manipulation。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。