Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Optimised directory traversal using FilePattern
values.
Case Sensitivity: these traversals are optimised to reduce the number of IO operations
performed. In particular, if the relevant subdirectories can be determined in
advance it will use doesDirectoryExist
rather than getDirectoryContents
.
However, on case-insensitive file systems, if there is a directory foo
,
then doesDirectoryExist "FOO"
will report True
, but FOO
won't be a result
returned by getDirectoryContents
, which may result in different search results
depending on whether a certain optimisations kick in.
If these optimisation differences are absolutely unacceptable use getDirectoryFilesIgnoreSlow
.
However, normally these differences are not a problem.
Synopsis
- getDirectoryFiles :: FilePath -> [FilePattern] -> IO [FilePath]
- getDirectoryFilesIgnore :: FilePath -> [FilePattern] -> [FilePattern] -> IO [FilePath]
- getDirectoryFilesIgnoreSlow :: FilePath -> [FilePattern] -> [FilePattern] -> IO [FilePath]
Documentation
getDirectoryFiles :: FilePath -> [FilePattern] -> IO [FilePath] Source #
Get the files below a certain root that match any of the FilePattern
values. Only matches
files, not directories. Avoids traversing into directories that it can detect won't have
any matches in.
getDirectoryFiles "myproject/src" ["**/*.h","**/*.c"]
If there are certain directories/files that should not be explored, use getDirectoryFilesIgnore
.
Warning: on case-insensitive file systems certain optimisations can cause surprising results. See the top of the module for details.
getDirectoryFilesIgnore :: FilePath -> [FilePattern] -> [FilePattern] -> IO [FilePath] Source #
Get the files below a certain root matching any of the first set of FilePattern
values,
but don't return any files which match any ignore pattern. Typically the ignore pattens will
end with /**
, e.g. .git/**
.
Warning: on case-insensitive file systems certain optimisations can cause surprising results. See the top of the module for details.
getDirectoryFilesIgnoreSlow :: FilePath -> [FilePattern] -> [FilePattern] -> IO [FilePath] Source #
Like getDirectoryFilesIgnore
but that the optimisations that may change behaviour on a
case-insensitive file system. Note that this function will never return more results
then getDirectoryFilesIgnore
, and may return less. However, it will obey invariants
such as:
getDirectoryFilesIgnoreSlow root [x] [] ++ getDirectoryFilesIgnoreSlow root [y] [] == getDirectoryFilesIgnoreSlow root [x,y] []
In contrast getDirectoryFilesIgnore
only guarantees that invariant on
case-sensitive file systems.