R: File Manipulation (original) (raw)
files {base} | R Documentation |
---|
Description
These functions provide a low-level interface to the computer's file system.
Usage
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)
Arguments
..., file1, file2 | character vectors, containing file names or paths. |
---|---|
from, to | character vectors, containing file names or paths. For file.copy and file.symlink to can alternatively be the path to a single existing directory. |
overwrite | logical; should existing destination files be overwritten? |
showWarnings | logical; should the warnings on failure be shown? |
recursive | logical. If to is a directory, should directories in from be copied (and their contents)? (Likecp -R on POSIX OSes.) |
copy.mode | logical: should file permission bits be copied where possible? |
copy.date | logical: should file dates be preserved where possible? See Sys.setFileTime. |
Details
The ...
arguments are concatenated to form one character string: you can specify the files separately or as one vector. All of these functions expand path names: see[path.expand](../../base/help/path.expand.html)
. (file.exists
silently reports false for paths that would be too long after expansion: the rest will give a warning.)
file.create
creates files with the given names if they do not already exist and truncates them if they do. They are created with the maximal read/write permissions allowed by the ‘umask’ setting (where relevant). By default a warning is given (with the reason) if the operation fails.
file.exists
returns a logical vector indicating whether the files named by its argument exist. (Here ‘exists’ is in the sense of the system's stat
call: a file will be reported as existing only if you have the permissions needed by stat
. Existence can also be checked by [file.access](../../base/help/file.access.html)
, which might use different permissions and so obtain a different result. Note that the existence of a file does not imply that it is readable: for that use [file.access](../../base/help/file.access.html)
.) What constitutes a ‘file’ is system-dependent, but should include directories. (However, directory names must not include a trailing backslash or slash on Windows.) Note that if the file is a symbolic link on a Unix-alike, the result indicates if the link points to an actual file, not just if the link exists. On Windows, the result is unreliable for a broken symbolic link (junction). Lastly, note the different function [exists](../../base/help/exists.html)
which checks for existence of R objects.
file.remove
attempts to remove the files named in its argument. On most Unix platforms ‘file’ includes _empty_directories, symbolic links, fifos and sockets. On Windows, ‘file’ means a regular file and not, say, an empty directory.
file.rename
attempts to rename files (and from
andto
must be of the same length). Where file permissions allow this will overwrite an existing element of to
. This is subject to the limitations of the OS's corresponding system call (see something like man 2 rename
on a Unix-alike): in particular in the interpretation of ‘file’: most platforms will not rename files from one file system to another. NB: This means that renaming a file from a temporary directory to the user's filespace or during package installation will often fail. (On Windows,file.rename
can rename files but not directories across volumes.) On platforms which allow directories to be renamed, typically neither or both of from
and to
must a directory, and if to
exists it must be an empty directory.
file.append
attempts to append the files named by its second argument to those named by its first. The R subscript recycling rule is used to align names given in vectors of different lengths.
file.copy
works in a similar way to file.append
but with the arguments in the natural order for copying. Copying to existing destination files is skipped unless overwrite = TRUE
. Theto
argument can specify a single existing directory. Ifcopy.mode = TRUE
file read/write/execute permissions are copied where possible, restricted by ‘umask’. (On Windows this applies only to files.) Other security attributes such as ACLs are not copied. On a POSIX filesystem the targets of symbolic links will be copied rather than the links themselves, and hard links are copied separately. Using copy.date = TRUE
may or may not copy the timestamp exactly (for example, fractional seconds may be omitted), but is more likely to do so as from R 3.4.0.
file.symlink
and file.link
make symbolic and hard links on those file systems which support them. For file.symlink
theto
argument can specify a single existing directory. (Unix and macOS native filesystems support both. Windows has hard links to files on NTFS file systems and concepts related to symbolic links on recent versions: see the section below on the Windows version of this help page. What happens on a FAT or SMB-mounted file system is OS-specific.)
File arguments with a marked encoding (see [Encoding](../../base/help/Encoding.html)
are if possible translated to the native encoding, except on Windows where Unicode file operations are used (so marking as UTF-8 can be used to access file paths not in the native encoding on suitable file systems).
Value
These functions return a logical vector indicating which operation succeeded for each of the files attempted. Using a missing value for a file or path name will always be regarded as a failure.
If showWarnings = TRUE
, file.create
will give a warning for an unexpected failure.
Case-insensitive file systems
Case-insensitive file systems are the norm on Windows and macOS, but can be found on all OSes (for example a FAT-formatted USB drive is probably case-insensitive).
These functions will most likely match existing files regardless of case on such file systems: however this is an OS function and it is possible that file names might be mapped to upper or lower case.
Warning
Always check the return value of these functions when used in package code. This is especially important for file.rename
, which has OS-specific restrictions (and note that the session temporary directory is commonly on a different file system from the working directory): it is only portable to use file.rename
to change file name(s) within a single directory.
Author(s)
Ross Ihaka, Brian Ripley
See Also
[file.info](../../base/help/file.info.html)
, [file.access](../../base/help/file.access.html)
, [file.path](../../base/help/file.path.html)
,[file.show](../../base/help/file.show.html)
, [list.files](../../base/help/list.files.html)
,[unlink](../../base/help/unlink.html)
, [basename](../../base/help/basename.html)
,[path.expand](../../base/help/path.expand.html)
.
[dir.create](../../base/help/dir.create.html)
.
[Sys.glob](../../base/help/Sys.glob.html)
to expand wildcards in file specifications.
[file_test](../../utils/html/filetest.html)
, [Sys.readlink](../../base/help/Sys.readlink.html)
(for ‘symlink’s).
https://en.wikipedia.org/wiki/Hard_link andhttps://en.wikipedia.org/wiki/Symbolic_link for the concepts of links and their limitations.
Examples
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")
[Package _base_ version 4.6.0 Index]