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,
|
unsetFileMode,
|
||||||
readMaybe,
|
readMaybe,
|
||||||
viaTmp,
|
viaTmp,
|
||||||
|
withTempFile,
|
||||||
dirContains,
|
dirContains,
|
||||||
dirContents,
|
dirContents,
|
||||||
myHomeDir,
|
myHomeDir,
|
||||||
|
@ -38,6 +39,7 @@ module Utility (
|
||||||
prop_relPathDirToFile_basics
|
prop_relPathDirToFile_basics
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
import IO (bracket)
|
||||||
import System.IO
|
import System.IO
|
||||||
import System.Exit
|
import System.Exit
|
||||||
import qualified System.Posix.Process
|
import qualified System.Posix.Process
|
||||||
|
@ -253,6 +255,18 @@ viaTmp a file content = do
|
||||||
a tmpfile content
|
a tmpfile content
|
||||||
renameFile tmpfile file
|
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.
|
{- Lists the contents of a directory.
|
||||||
- Unlike getDirectoryContents, paths are not relative to the directory. -}
|
- Unlike getDirectoryContents, paths are not relative to the directory. -}
|
||||||
dirContents :: FilePath -> IO [FilePath]
|
dirContents :: FilePath -> IO [FilePath]
|
||||||
|
|
Loading…
Add table
Reference in a new issue