\HeaderA{files}{File Manipulation}{files}
\aliasA{file.append}{files}{file.append}
\aliasA{file.copy}{files}{file.copy}
\aliasA{file.create}{files}{file.create}
\aliasA{file.exists}{files}{file.exists}
\aliasA{file.rcopy}{files}{file.rcopy}
\aliasA{file.remove}{files}{file.remove}
\aliasA{file.rename}{files}{file.rename}
\aliasA{file.symlink}{files}{file.symlink}
\keyword{file}{files}
\begin{Description}\relax
These functions provide a low-level interface to the computer's
file system.
\end{Description}
\begin{Usage}
\begin{verbatim}
file.create(..., showWarnings = TRUE)
file.exists(...)
file.remove(...)
file.rename(from, to)
file.append(file1, file2)
file.copy(from, to, overwrite = recursive, recursive = FALSE)
file.symlink(from, to)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{..., file1, file2, from, to}] character vectors,
containing file names or paths.
\item[\code{overwrite}] logical; should the destination files be overwritten?
\item[\code{showWarnings}] logical; should the warnings on failure be shown?
\item[\code{recursive}] logical. If \code{to} is a directory, should
directories in \code{from} be copied (and their contents).
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
The \code{...} 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 \code{\LinkA{path.expand}{path.expand}}.

\code{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 permissions allowed by the \code{umask} setting.

\code{file.exists} returns a logical vector indicating whether
the files named by its argument exist.  (Here \sQuote{exists} is in the
sense of the system's \code{stat} call: a file will be reported as
existing only if you have the permissions needed by \code{stat}.
Existence can also be checked by \code{\LinkA{file.access}{file.access}}, 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 \code{\LinkA{file.access}{file.access}}.)
Note that if the file is a symbolic link, the result indicates if the
libk points to an actual file, not just if the link exists.

\code{file.remove} attempts to remove the files named in its
argument.
On most platforms \sQuote{file} includes \emph{empty} directories,
symbolic links, fifos and sockets.

\code{file.rename} attempts to rename a single file.

\code{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.

\code{file.copy} works in a similar way to \code{file.append} but with
the arguments in the natural order for copying.  Copying to existing
destination files is skipped unless \code{overwrite = TRUE}.
The \code{to} argument can specify a single existing directory.

\code{file.symlink} makes symbolic links on those Unix-like platforms
which support them.  The \code{to} argument can specify a single
existing directory.
\end{Details}
\begin{Value}
\code{file.rename} returns a logical value, true for success.

The remaining 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 \code{showWarnings = TRUE}, \code{file.create} will give a warning
for an unexpected failure.
\end{Value}
\begin{Author}\relax
Ross Ihaka, Brian Ripley
\end{Author}
\begin{SeeAlso}\relax
\code{\LinkA{file.info}{file.info}}, \code{\LinkA{file.access}{file.access}}, \code{\LinkA{file.path}{file.path}},
\code{\LinkA{file.show}{file.show}}, \code{\LinkA{list.files}{list.files}},
\code{\LinkA{unlink}{unlink}}, \code{\LinkA{basename}{basename}},
\code{\LinkA{path.expand}{path.expand}}.

\code{\LinkA{dir.create}{dir.create}}.

\code{\LinkA{Sys.glob}{Sys.glob}} to expand wildcards in file specifications.

\code{\LinkA{file\_test}{file.Rul.test}}.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
cat("file A\n", file="A")
cat("file B\n", file="B")
file.append("A", "B")
file.create("A")
file.append("A", rep("B", 10))
if(interactive()) file.show("A")
file.copy("A", "C")
dir.create("tmp")
file.copy(c("A", "B"), "tmp")
list.files("tmp")
setwd("tmp")
file.remove("B")
file.symlink(file.path("..", c("A", "B")), ".")
setwd("..")
unlink("tmp", recursive=TRUE)
file.remove("A", "B", "C")
\end{ExampleCode}
\end{Examples}

