Safe Haskell | None |
---|---|
Language | Haskell2010 |
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
- withCurrentDirectory :: FilePath -> IO a -> IO a
- getDirectoryContents :: FilePath -> IO [FilePath]
- doesDirectoryExist :: FilePath -> IO Bool
- doesFileExist :: FilePath -> IO Bool
- data Permissions
- data XdgDirectory
- data XdgDirectoryList
- canonicalizePath :: FilePath -> IO FilePath
- copyFile :: FilePath -> FilePath -> IO ()
- copyFileWithMetadata :: FilePath -> FilePath -> IO ()
- copyPermissions :: FilePath -> FilePath -> IO ()
- createDirectory :: FilePath -> IO ()
- createDirectoryIfMissing :: Bool -> FilePath -> IO ()
- createDirectoryLink :: FilePath -> FilePath -> IO ()
- createFileLink :: FilePath -> FilePath -> IO ()
- doesPathExist :: FilePath -> IO Bool
- exeExtension :: String
- findExecutable :: String -> IO (Maybe FilePath)
- findExecutables :: String -> IO [FilePath]
- findExecutablesInDirectories :: [FilePath] -> String -> IO [FilePath]
- findFileWith :: (FilePath -> IO Bool) -> [FilePath] -> String -> IO (Maybe FilePath)
- findFilesWith :: (FilePath -> IO Bool) -> [FilePath] -> String -> IO [FilePath]
- getAccessTime :: FilePath -> IO UTCTime
- getAppUserDataDirectory :: FilePath -> IO FilePath
- getCurrentDirectory :: IO FilePath
- getFileSize :: FilePath -> IO Integer
- getHomeDirectory :: IO FilePath
- getModificationTime :: FilePath -> IO UTCTime
- getPermissions :: FilePath -> IO Permissions
- getSymbolicLinkTarget :: FilePath -> IO FilePath
- getTemporaryDirectory :: IO FilePath
- getUserDocumentsDirectory :: IO FilePath
- getXdgDirectory :: XdgDirectory -> FilePath -> IO FilePath
- getXdgDirectoryList :: XdgDirectoryList -> IO [FilePath]
- listDirectory :: FilePath -> IO [FilePath]
- makeAbsolute :: FilePath -> IO FilePath
- makeRelativeToCurrentDirectory :: FilePath -> IO FilePath
- pathIsSymbolicLink :: FilePath -> IO Bool
- removeDirectory :: FilePath -> IO ()
- removeDirectoryLink :: FilePath -> IO ()
- removeDirectoryRecursive :: FilePath -> IO ()
- removeFile :: FilePath -> IO ()
- removePathForcibly :: FilePath -> IO ()
- renameDirectory :: FilePath -> FilePath -> IO ()
- renameFile :: FilePath -> FilePath -> IO ()
- renamePath :: FilePath -> FilePath -> IO ()
- setAccessTime :: FilePath -> UTCTime -> IO ()
- setCurrentDirectory :: FilePath -> IO ()
- setModificationTime :: FilePath -> UTCTime -> IO ()
- setPermissions :: FilePath -> Permissions -> IO ()
- isSymbolicLink :: FilePath -> IO Bool
- emptyPermissions :: Permissions
- findFile :: [FilePath] -> String -> IO (Maybe FilePath)
- findFiles :: [FilePath] -> String -> IO [FilePath]
- setOwnerExecutable :: Bool -> Permissions -> Permissions
- setOwnerReadable :: Bool -> Permissions -> Permissions
- setOwnerSearchable :: Bool -> Permissions -> Permissions
- setOwnerWritable :: Bool -> Permissions -> Permissions
- createDirectoryPrivate :: String -> IO ()
- listContents :: FilePath -> IO [FilePath]
- listDirectories :: FilePath -> IO [FilePath]
- listFiles :: FilePath -> IO [FilePath]
- listFilesInside :: (FilePath -> IO Bool) -> FilePath -> IO [FilePath]
- listFilesRecursive :: FilePath -> IO [FilePath]
Documentation
withCurrentDirectory :: FilePath -> IO a -> IO a #
getDirectoryContents :: FilePath -> IO [FilePath] #
doesDirectoryExist :: FilePath -> IO Bool #
doesFileExist :: FilePath -> IO Bool #
data Permissions #
Instances
Read Permissions | |
Defined in System.Directory.Internal.Common Methods readsPrec :: Int -> ReadS Permissions # readList :: ReadS [Permissions] # readPrec :: ReadPrec Permissions # readListPrec :: ReadPrec [Permissions] # | |
Show Permissions | |
Defined in System.Directory.Internal.Common Methods showsPrec :: Int -> Permissions -> ShowS show :: Permissions -> String showList :: [Permissions] -> ShowS | |
Eq Permissions | |
Defined in System.Directory.Internal.Common | |
Ord Permissions | |
Defined in System.Directory.Internal.Common Methods compare :: Permissions -> Permissions -> Ordering (<) :: Permissions -> Permissions -> Bool (<=) :: Permissions -> Permissions -> Bool (>) :: Permissions -> Permissions -> Bool (>=) :: Permissions -> Permissions -> Bool max :: Permissions -> Permissions -> Permissions min :: Permissions -> Permissions -> Permissions |
data XdgDirectory #
Instances
data XdgDirectoryList #
Constructors
XdgDataDirs | |
XdgConfigDirs |
Instances
canonicalizePath :: FilePath -> IO FilePath #
copyFileWithMetadata :: FilePath -> FilePath -> IO () #
copyPermissions :: FilePath -> FilePath -> IO () #
createDirectory :: FilePath -> IO () #
createDirectoryIfMissing :: Bool -> FilePath -> IO () #
createDirectoryLink :: FilePath -> FilePath -> IO () #
createFileLink :: FilePath -> FilePath -> IO () #
doesPathExist :: FilePath -> IO Bool #
exeExtension :: String #
findExecutable :: String -> IO (Maybe FilePath) #
findExecutables :: String -> IO [FilePath] #
findExecutablesInDirectories :: [FilePath] -> String -> IO [FilePath] #
getAccessTime :: FilePath -> IO UTCTime #
getFileSize :: FilePath -> IO Integer #
getModificationTime :: FilePath -> IO UTCTime #
getPermissions :: FilePath -> IO Permissions #
getSymbolicLinkTarget :: FilePath -> IO FilePath #
getXdgDirectory :: XdgDirectory -> FilePath -> IO FilePath #
getXdgDirectoryList :: XdgDirectoryList -> IO [FilePath] #
listDirectory :: FilePath -> IO [FilePath] #
makeAbsolute :: FilePath -> IO FilePath #
pathIsSymbolicLink :: FilePath -> IO Bool #
removeDirectory :: FilePath -> IO () #
removeDirectoryLink :: FilePath -> IO () #
removeDirectoryRecursive :: FilePath -> IO () #
removeFile :: FilePath -> IO () #
removePathForcibly :: FilePath -> IO () #
renameDirectory :: FilePath -> FilePath -> IO () #
renameFile :: FilePath -> FilePath -> IO () #
renamePath :: FilePath -> FilePath -> IO () #
setAccessTime :: FilePath -> UTCTime -> IO () #
setCurrentDirectory :: FilePath -> IO () #
setModificationTime :: FilePath -> UTCTime -> IO () #
setPermissions :: FilePath -> Permissions -> IO () #
isSymbolicLink :: FilePath -> IO Bool #
setOwnerExecutable :: Bool -> Permissions -> Permissions #
setOwnerReadable :: Bool -> Permissions -> Permissions #
setOwnerSearchable :: Bool -> Permissions -> Permissions #
setOwnerWritable :: Bool -> Permissions -> Permissions #
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"]