pushTemporaryFile | R Documentation |
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.
## Default S3 method:
pushTemporaryFile(filename, path=NULL, suffix=".tmp", isFile=FALSE, ..., verbose=FALSE)
filename |
The filename of the file. |
path |
The path of the file. |
suffix |
The suffix to be appended. |
isFile |
If |
... |
Not used. |
verbose |
A |
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.
Returns the pathname with the suffix appended.
Henrik Bengtsson
popTemporaryFile
().
createAtomically <- function(pathname, ...) {
cat("Pathname: ", pathname, "\n", 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, "\n", sep="");
cat(file=pathnameT, "This file was created atomically:\n");
for (kk in 1:10) {
cat(file=pathnameT, kk, "\n", append=TRUE);
# Emulate a slow process
if (interactive()) Sys.sleep(0.1)
}
cat(file=pathnameT, "END OF FILE\n", 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="\n");
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.