R: Appends a temporary suffix to the pathname

pushTemporaryFile {R.utils} | R Documentation

## Appends a temporary suffix to the pathname

### Description

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.

### Usage

    ## Default S3 method:
    pushTemporaryFile(filename, path=NULL, suffix=".tmp", isFile=FALSE, ..., verbose=FALSE)

### Arguments

`filename` | The filename of the file.
`path` | The path of the file.
`suffix` | The 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`.

### Details

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.

### Value

Returns the pathname with the suffix appended.

### Author(s)

Henrik Bengtsson

### See Also

`popTemporaryFile`().

### Examples

    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");

[Package R.utils version 2.7.0 Index]