temporary-1.3: Portable temporary file and directory support
Safe HaskellSafe-Inferred
LanguageHaskell2010

System.IO.Temp

Description

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.

Synopsis

Documentation

withSystemTempFile #

Arguments

:: (MonadIO m, MonadMask m) 
=> String

File name template

-> (FilePath -> Handle -> m a)

Callback that can use the file

-> m a 

Create, open, and use a temporary file in the system standard temporary directory.

The temp file is deleted after use.

Behaves exactly the same as withTempFile, except that the parent temporary directory will be that returned by getCanonicalTemporaryDirectory.

withSystemTempDirectory #

Arguments

:: (MonadIO m, MonadMask m) 
=> String

Directory name template

-> (FilePath -> m a)

Callback that can use the directory

-> m a 

Create and use a temporary directory in the system standard temporary directory.

Behaves exactly the same as withTempDirectory, except that the parent temporary directory will be that returned by getCanonicalTemporaryDirectory.

withTempFile #

Arguments

:: (MonadIO m, MonadMask m) 
=> FilePath

Parent directory to create the file in

-> String

File name template

-> (FilePath -> Handle -> m a)

Callback that can use the file

-> m a 

Create, open, and use a temporary file in the given directory.

The temp file is deleted after use.

withTempDirectory #

Arguments

:: (MonadMask m, MonadIO m) 
=> FilePath

Parent directory to create the directory in

-> String

Directory name template

-> (FilePath -> m a)

Callback that can use the directory

-> m a 

Create and use a temporary directory inside the given directory.

The directory is deleted after use.

openNewBinaryFile :: FilePath -> String -> IO (FilePath, Handle) #

Like openBinaryTempFile, but uses 666 rather than 600 for the permissions.

Equivalent to openBinaryTempFileWithDefaultPermissions.

createTempDirectory #

Arguments

:: FilePath

Parent directory to create the directory in

-> String

Directory name template

-> IO FilePath 

Create a temporary directory.

writeTempFile #

Arguments

:: FilePath

Parent directory to create the file in

-> String

File name template

-> String

Data to store in the file

-> IO FilePath

Path to the (written and closed) file

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.

Since: 1.2.1

writeSystemTempFile #

Arguments

:: String

File name template

-> String

Data to store in the file

-> IO FilePath

Path to the (written and closed) file

Like writeTempFile, but use the system directory for temporary files.

Since: 1.2.1

emptyTempFile #

Arguments

:: FilePath

Parent directory to create the file in

-> String

File name template

-> IO FilePath

Path to the (written and closed) 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.

Since: 1.2.1

emptySystemTempFile #

Arguments

:: String

File name template

-> IO FilePath

Path to the (written and closed) file

Like emptyTempFile, but use the system directory for temporary files.

Since: 1.2.1

Re-exports from System.IO

openTempFile :: FilePath -> String -> IO (FilePath, Handle) #

openBinaryTempFile :: FilePath -> String -> IO (FilePath, Handle) #

Auxiliary functions

getCanonicalTemporaryDirectory :: IO FilePath #

Return the absolute and canonical path to the system temporary directory.

>>> setCurrentDirectory "/home/feuerbach/"
>>> setEnv "TMPDIR" "."
>>> getTemporaryDirectory
"."
>>> getCanonicalTemporaryDirectory
"/home/feuerbach"