Functions to create temporary files and directories.
Most functions come in two flavours: those that create files/directories
under the system standard temporary directory and those that use the
user-supplied directory.
The functions that create files/directories under the system standard
temporary directory will return canonical absolute paths (see
getCanonicalTemporaryDirectory). The functions use the user-supplied
directory do not canonicalize the returned path.
The action inside withTempFile or withTempDirectory is allowed to
remove the temporary file/directory if it needs to.
Templates and file names
The treatment of templates differs somewhat for files vs directories.
For files, the template has form name.ext, and a random number will be
placed between between the name and the extension to yield a unique file
name, e.g. name1804289383846930886.ext.
For directories, no extension is recognized.
A random hexadecimal string (whose length depends on the system's word
size) is appended to the end of the template.
For instance,
the directory template dir may result in a directory named
dir-e4bd89e5d00acdee.
You shouldn't rely on the specific form of file or directory names
generated by the library; it has changed in the past and may change in the future.
Create a unique new file, write (text mode) a given data string to it,
and close the handle again. The file will not be deleted automatically,
and only the current user will have permission to access the file.
Create a unique new empty file. (Equivalent to writeTempFile with empty data string.)
This is useful if the actual content is provided by an external process.
File name template. If the template is "foo.ext" then
the created file will be "fooXXX.ext" where XXX is some
random number. Note that this should not contain any path
separator characters. On Windows, the template prefix may
be truncated to 3 chars, e.g. "foobar.ext" will be
"fooXXX.ext".
The function creates a temporary file in ReadWrite mode.
The created file isn't deleted automatically, so you need to delete it manually.
The file is created with permissions such that only the current
user can read/write it.
With some exceptions (see below), the file will be created securely
in the sense that an attacker should not be able to cause
openTempFile to overwrite another file on the filesystem using your
credentials, by putting symbolic links (on Unix) in the place where
the temporary file is to be created. On Unix the O_CREAT and
O_EXCL flags are used to prevent this attack, but note that
O_EXCL is sometimes not supported on NFS filesystems, so if you
rely on this behaviour it is best to use local filesystems only.