add withTempFile
This is essentially the same as withSystemTempFile from System.IO.Temp, but that library is not packaged for Debian, and may not be widely used. I see various other withTempFile implementations here and there, none canonical. Sigh.
This commit is contained in:
parent
cfcd7805b4
commit
354c5f349b
1 changed files with 14 additions and 0 deletions
14
Utility.hs
14
Utility.hs
|
@ -23,6 +23,7 @@ module Utility (
|
|||
unsetFileMode,
|
||||
readMaybe,
|
||||
viaTmp,
|
||||
withTempFile,
|
||||
dirContains,
|
||||
dirContents,
|
||||
myHomeDir,
|
||||
|
@ -38,6 +39,7 @@ module Utility (
|
|||
prop_relPathDirToFile_basics
|
||||
) where
|
||||
|
||||
import IO (bracket)
|
||||
import System.IO
|
||||
import System.Exit
|
||||
import qualified System.Posix.Process
|
||||
|
@ -253,6 +255,18 @@ viaTmp a file content = do
|
|||
a tmpfile content
|
||||
renameFile tmpfile file
|
||||
|
||||
{- Runs an action with a temp file, then removes the file. -}
|
||||
withTempFile :: String -> (FilePath -> Handle -> IO a) -> IO a
|
||||
withTempFile template action = bracket create remove use
|
||||
where
|
||||
create = do
|
||||
tmpdir <- catch getTemporaryDirectory (const $ return ".")
|
||||
openTempFile tmpdir template
|
||||
remove (name, handle) = do
|
||||
hClose handle
|
||||
catchBool (removeFile name >> return True)
|
||||
use (name, handle) = action name handle
|
||||
|
||||
{- Lists the contents of a directory.
|
||||
- Unlike getDirectoryContents, paths are not relative to the directory. -}
|
||||
dirContents :: FilePath -> IO [FilePath]
|
||||
|
|
Loading…
Reference in a new issue