file.access
Ascertain File Accessibility
Utility function to access information about files on the user's file systems.
- Keywords
- file
Usage
file.access(names, mode = 0)
Arguments
- names
- character vector containing file names.
Tilde-expansion will be done: see
path.expand
. - mode
- integer specifying access mode required: see Details.
Details
The mode
value can be the exclusive or of the following values
- 0
- test for existence.
- 1
- test for execute permission.
- 2
- test for write permission.
- 4
- test for read permission.
unix
Permission will be computed for real user ID and real group ID (rather
than the effective IDs).
windows
This function does uses the C function _access
in
msvcrt.dll, but was written using Win32 API functions.
Windows does not have the concept of an executable file, so
this function regards directories and files with extension
.exe, .bat, .cmd and .com as executable.
(system
and Sys.which
make the same assumption.)
UTF-8-encoded file names not valid in the current locale can be used.
Please note that it is not a good idea to use this function to test
before trying to open a file. On a multi-tasking system, it is
possible that the accessibility of a file will change between the time
you call file.access()
and the time you try to open the file.
It is better to wrap file open attempts in try
.
Value
-
An integer vector with values 0 for success and -1 for failure.
Note
This is intended as a replacement for the S-PLUS function
access
, a wrapper for the C function of the same name, which
explains the return value encoding. Note that
the return value is false for success.
See Also
file.info
for more details on permissions,
Sys.chmod
to change permissions, and
try
for a test it and see approach.
file_test
for shell-style file tests.
Examples
library(base)
fa <- file.access(dir("."))
table(fa) # count successes & failures
windows
d <- dir(file.path(R.home(), "bin"))
df <- dir(file.path(R.home(), "bin"), full.names = TRUE)
d[file.access(df, 0) == 0] # all exist
d[file.access(df, 1) == 0] # some are executable, some are not
d[file.access(df, 4) == 0] # hopefully all are readable
d[file.access(df, 2) == 0] # they may or may not be writable