Usage
## S3 method for class 'default}(filename, path=NULL, suffix=".tmp", isFile=FALSE, ..., verbose=FALSE)':
pushTemporaryFileundefined
Appends a temporary suffix to the pathname and, optionally, renames an existing file accordingly.
In combination with popTemporaryFile
(), this method is useful
for creating a file/writing data to file atomically, by
first writing to a temporary file which is the renamed. If for
some reason the generation of the file was interrupted, for instance
by a user interrupt or a power failure, then it is only the temporary
file that is incomplete.
- filename
{The filename of the file.}
- path
{The path of the file.}
- suffix
{The temporary suffix to be appended.}
- isFile
{If TRUE
, the file must exist and will be renamed
on the file system. If FALSE
, it is only the pathname string
that will be modified. For details, see below.}
- ...
{Not used.}
- verbose
{A logical
or Verbose
.}
Returns the pathname with the temporary suffix appended.
If isFile
is FALSE
, the pathname where the suffix of the
temporary pathname has been added is returned.
If isFile
is TRUE
, the file is also renamed.
Then, if the file does not exists or it was not successfully
renamed, an exception is thrown.
createAtomically <- function(pathname, ...) {
cat("Pathname: ", pathname, "
", sep="");
# Generate a file atomically, i.e. the file will either be
# complete or not created at all. If interrupted while
# writing, only a temporary file will exist/remain.
pathnameT <- pushTemporaryFile(pathname);
cat("Temporary pathname: ", pathnameT, "
", sep="");
cat(file=pathnameT, "This file was created atomically:
");
for (kk in 1:10) {
cat(file=pathnameT, kk, "
", append=TRUE);
Sys.sleep(0.1);
}
cat(file=pathnameT, "END OF FILE
", append=TRUE);
# Rename the temporary file
pathname <- popTemporaryFile(pathnameT);
pathname;
} # createAtomically()
pathname <- tempfile();
tryCatch({
# Try to interrupt the process while writing...
pathname <- createAtomically(pathname);
}, interrupt=function(intr) {
str(intr);
})
# ...and this will throw an exception
bfr <- readLines(pathname);
cat(bfr, sep="
");
[object Object]
popTemporaryFile
().
utilities
programming
IO