| % File src/library/base/man/files.Rd |
| % Part of the R package, https://www.R-project.org |
| % Copyright 1995-2019 R Core Team |
| % Distributed under GPL 2 or later |
| |
| \name{files2} |
| \alias{dir.create} |
| \alias{dir.exists} |
| \alias{Sys.chmod} |
| \alias{Sys.umask} |
| \concept{directory} |
| \concept{mkdir} |
| \alias{umask} % for links |
| \title{Manipulation of Directories and File Permissions} |
| \description{ |
| These functions provide a low-level interface to the computer's |
| file system. |
| } |
| \usage{ |
| dir.exists(paths) |
| dir.create(path, showWarnings = TRUE, recursive = FALSE, mode = "0777") |
| Sys.chmod(paths, mode = "0777", use_umask = TRUE) |
| Sys.umask(mode = NA) |
| } |
| \arguments{ |
| \item{path}{a character vector containing a single path name. Tilde |
| expansion (see \code{\link{path.expand}}) is done.} |
| \item{paths}{character vectors containing file or directory paths. Tilde |
| expansion (see \code{\link{path.expand}}) is done.} |
| \item{showWarnings}{logical; should the warnings on failure be shown?} |
| \item{recursive}{logical. Should elements of the path other than the |
| last be created? If true, like the Unix command \command{mkdir -p}.} |
| \item{mode}{the mode to be used on Unix-alikes: it will be |
| coerced by \code{\link{as.octmode}}. For \code{Sys.chmod} it is |
| recycled along \code{paths}.} |
| \item{use_umask}{logical: should the mode be restricted by the |
| \code{umask} setting?} |
| } |
| \details{ |
| \code{dir.create} creates the last element of the path, unless |
| \code{recursive = TRUE}. Trailing path separators are discarded. |
| #ifdef windows |
| On Windows drives are allowed in the path specification and unless |
| the path is rooted, it will be interpreted relative to the current |
| directory on that drive. \code{mode} is ignored on Windows. |
| #endif |
| #ifdef unix |
| The mode will be modified by the \code{umask} setting in the same way |
| as for the system function \code{mkdir}. What modes can be set is |
| OS-dependent, and it is unsafe to assume that more than three octal |
| digits will be used. For more details see your OS's documentation on the |
| system call \code{mkdir}, e.g.\sspace{}\command{man 2 mkdir} (and not that on |
| the command-line utility of that name). |
| #endif |
| |
| One of the idiosyncrasies of Windows is that directory creation may |
| report success but create a directory with a different name, for |
| example \code{dir.create("G.S.")} creates \file{"G.S"}. This is |
| undocumented, and what are the precise circumstances is unknown (and |
| might depend on the version of Windows). Also avoid directory names |
| with a trailing space. |
| %% http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx |
| %% is vague about this! |
| |
| \code{Sys.chmod} sets the file permissions of one or more files. |
| #ifdef unix |
| It may not be supported on a system (when a warning is issued). |
| See the comments for \code{dir.create} for how modes are interpreted. |
| Changing mode on a symbolic link is unlikely to work (nor be |
| necessary). For more details see your OS's documentation on the |
| system call \code{chmod}, e.g.\sspace{}\command{man 2 chmod} (and not that on |
| the command-line utility of that name). Whether this changes the |
| permission of a symbolic link or its target is OS-dependent (although |
| to change the target is more common, and POSIX does not support modes |
| for symbolic links: BSD-based Unixes do, though). |
| #endif |
| #ifdef windows |
| The interpretation of \code{mode} in the Windows system functions is |
| non-POSIX and only supports setting the read-only attribute of the |
| file. So \R interprets \code{mode} to mean set read-only if and only |
| if \code{(mode & 0200) == 0} (interpreted in octal). Windows has a much |
| more extensive system of file permissions on some file systems |
| (e.g., versions of NTFS) which are unrelated to this system call. |
| #endif |
| |
| \code{Sys.umask} sets the \code{umask} and returns the previous value: |
| as a special case \code{mode = NA} just returns the current value. |
| #ifdef unix |
| It may not be supported (when a warning is issued and \code{"0"} |
| is returned). For more details see your OS's documentation on the |
| system call \code{umask}, e.g.\sspace{}\command{man 2 umask}. |
| #endif |
| #ifdef windows |
| All files on Windows are regarded as readable, and files being |
| executable is not a Windows concept. So \code{umask} only controls |
| whether a file is writable: a setting of \code{"200"} makes files (but |
| not directories) created subsequently read-only. |
| #endif |
| %% http://msdn.microsoft.com/en-us/library/5axxx3be%28v=vs.80%29.aspx |
| |
| How modes are handled depends on the file system, even on Unix-alikes |
| (although their documentation is often written assuming a POSIX file |
| system). So treat documentation cautiously if you are using, say, a |
| FAT/FAT32 or network-mounted file system. |
| |
| See \link{files} for how file paths with marked encodings are interpreted. |
| } |
| \value{ |
| \code{dir.exists} returns a logical vector of \code{TRUE} or |
| \code{FALSE} values (without names). |
| |
| \code{dir.create} and \code{Sys.chmod} return invisibly a logical vector |
| indicating if the operation succeeded for each of the files attempted. |
| Using a missing value for a path name will always be regarded as a |
| failure. \code{dir.create} indicates failure if the directory already |
| exists. If \code{showWarnings = TRUE}, \code{dir.create} will give a |
| warning for an unexpected failure (e.g., not for a missing value nor |
| for an already existing component for \code{recursive = TRUE}). |
| |
| \code{Sys.umask} returns the previous value of the \code{umask}, |
| as a length-one object of class \code{"\link{octmode}"}: the |
| visibility flag is off unless \code{mode} is \code{NA}. |
| |
| See also the section in the help for \code{\link{file.exists}} on |
| case-insensitive file systems for the interpretation of \code{path} |
| and \code{paths}. |
| } |
| #ifdef windows |
| \note{ |
| There is no guarantee that these functions will handle Windows |
| relative paths of the form \file{d:path}: try \file{d:./path} |
| instead. In particular, \file{d:} is not recognized as a directory. |
| Nor are \samp{\\\\?\\} prefixes (and similar) supported. |
| |
| UTF-8-encoded dirnames not valid in the current locale can be used. |
| } |
| #endif |
| |
| \author{ |
| Ross Ihaka, Brian Ripley |
| } |
| \seealso{ |
| \code{\link{file.info}}, \code{\link{file.exists}}, \code{\link{file.path}}, |
| \code{\link{list.files}}, \code{\link{unlink}}, |
| \code{\link{basename}}, \code{\link{path.expand}}. |
| } |
| |
| \examples{\dontrun{ |
| ## Fix up maximal allowed permissions in a file tree |
| Sys.chmod(list.dirs("."), "777") |
| f <- list.files(".", all.files = TRUE, full.names = TRUE, recursive = TRUE) |
| Sys.chmod(f, (file.info(f)$mode | "664")) |
| }} |
| \keyword{file} |