extra
Safe HaskellNone
LanguageHaskell2010

System.Directory.Extra

Description

Extra directory functions. Most of these functions provide cleaned up and generalised versions of getDirectoryContents, see listContents for the differences.

Synopsis

Documentation

exeExtension :: String #

findExecutable :: String -> IO (Maybe FilePath) #

findExecutables :: String -> IO [FilePath] #

findFile :: [FilePath] -> String -> IO (Maybe FilePath) #

findFileWith :: (FilePath -> IO Bool) -> [FilePath] -> String -> IO (Maybe FilePath) #

findFiles :: [FilePath] -> String -> IO [FilePath] #

findFilesWith :: (FilePath -> IO Bool) -> [FilePath] -> String -> IO [FilePath] #

getAccessTime :: FilePath -> IO UTCTime #

getFileSize :: FilePath -> IO Integer #

setAccessTime :: FilePath -> UTCTime -> IO () #

setModificationTime :: FilePath -> UTCTime -> IO () #

data Permissions #

Instances

Instances details
Read Permissions # 
Instance details

Defined in System.Directory.Internal.Common

Show Permissions # 
Instance details

Defined in System.Directory.Internal.Common

Methods

showsPrec :: Int -> Permissions -> ShowS

show :: Permissions -> String

showList :: [Permissions] -> ShowS

Eq Permissions # 
Instance details

Defined in System.Directory.Internal.Common

Methods

(==) :: Permissions -> Permissions -> Bool

(/=) :: Permissions -> Permissions -> Bool

Ord Permissions # 
Instance details

Defined in System.Directory.Internal.Common

data XdgDirectory #

Instances

Instances details
Bounded XdgDirectory # 
Instance details

Defined in System.Directory.Internal.Common

Enum XdgDirectory # 
Instance details

Defined in System.Directory.Internal.Common

Read XdgDirectory # 
Instance details

Defined in System.Directory.Internal.Common

Show XdgDirectory # 
Instance details

Defined in System.Directory.Internal.Common

Methods

showsPrec :: Int -> XdgDirectory -> ShowS

show :: XdgDirectory -> String

showList :: [XdgDirectory] -> ShowS

Eq XdgDirectory # 
Instance details

Defined in System.Directory.Internal.Common

Methods

(==) :: XdgDirectory -> XdgDirectory -> Bool

(/=) :: XdgDirectory -> XdgDirectory -> Bool

Ord XdgDirectory # 
Instance details

Defined in System.Directory.Internal.Common

data XdgDirectoryList #

Constructors

XdgDataDirs 
XdgConfigDirs 

Instances

Instances details
Bounded XdgDirectoryList # 
Instance details

Defined in System.Directory.Internal.Common

Enum XdgDirectoryList # 
Instance details

Defined in System.Directory.Internal.Common

Read XdgDirectoryList # 
Instance details

Defined in System.Directory.Internal.Common

Show XdgDirectoryList # 
Instance details

Defined in System.Directory.Internal.Common

Methods

showsPrec :: Int -> XdgDirectoryList -> ShowS

show :: XdgDirectoryList -> String

showList :: [XdgDirectoryList] -> ShowS

Eq XdgDirectoryList # 
Instance details

Defined in System.Directory.Internal.Common

Ord XdgDirectoryList # 
Instance details

Defined in System.Directory.Internal.Common

createDirectoryPrivate :: String -> IO () Source #

Create a directory with permissions so that only the current user can view it. On Windows this function is equivalent to createDirectory.

listContents :: FilePath -> IO [FilePath] Source #

List the files and directories directly within a directory. Each result will be prefixed by the query directory, and the special directories . and .. will be ignored. Intended as a cleaned up version of getDirectoryContents.

withTempDir $ \dir -> do writeFile (dir </> "test.txt") ""; (== [dir </> "test.txt"]) <$> listContents dir
let touch = mapM_ $ \x -> createDirectoryIfMissing True (takeDirectory x) >> writeFile x ""
let listTest op as bs = withTempDir $ \dir -> do touch $ map (dir </>) as; res <- op dir; pure $ map (drop (length dir + 1)) res == bs
listTest listContents ["bar.txt","foo/baz.txt","zoo"] ["bar.txt","foo","zoo"]

listDirectories :: FilePath -> IO [FilePath] Source #

Like listContents, but only returns the directories in a directory, not the files. Each directory will be prefixed by the query directory.

listTest listDirectories ["bar.txt","foo/baz.txt","zoo"] ["foo"]

listFiles :: FilePath -> IO [FilePath] Source #

Like listContents, but only returns the files in a directory, not other directories. Each file will be prefixed by the query directory.

listTest listFiles ["bar.txt","foo/baz.txt","zoo"] ["bar.txt","zoo"]

listFilesInside :: (FilePath -> IO Bool) -> FilePath -> IO [FilePath] Source #

Like listFilesRecursive, but with a predicate to decide where to recurse into. Typically directories starting with . would be ignored. The initial argument directory will have the test applied to it.

listTest (listFilesInside $ pure . not . isPrefixOf "." . takeFileName)
    ["bar.txt","foo" </> "baz.txt",".foo" </> "baz2.txt", "zoo"] ["bar.txt","zoo","foo" </> "baz.txt"]
listTest (listFilesInside $ const $ pure False) ["bar.txt"] []

listFilesRecursive :: FilePath -> IO [FilePath] Source #

Like listFiles, but goes recursively through all subdirectories. This function will follow symlinks, and if they form a loop, this function will not terminate.

listTest listFilesRecursive ["bar.txt","zoo","foo" </> "baz.txt"] ["bar.txt","zoo","foo" </> "baz.txt"]