Haskell在目录中获取目录

克里斯·斯特里钦斯基

如何获取目录中的目录列表?

我提出了以下建议,但我希望有一种更优雅的方法:

import System.Directory
import qualified Filesystem.Path as FsP
import Filesystem.Path.CurrentOS
import Control.Monad

getDirectories :: Prelude.FilePath -> IO [Prelude.FilePath]
getDirectories x = do
  listDirectory x
  >>= (return . fmap decodeString)
  >>= return . fmap (FsP.append (decodeString x))
  >>= (return . fmap encodeString)
  >>= filterM doesDirectoryExist
亨利

看来您正在使用已弃用的system- filepath包,而不是使用filepath包:

import           Control.Monad    (filterM)
import           System.Directory (doesDirectoryExist, listDirectory)
import           System.FilePath  ((</>))

getDirectories :: FilePath -> IO [FilePath]
getDirectories filePath = do
  allFiles <- listDirectory filePath
  filterM (doesDirectoryExist . (filePath </>)) allFiles

或者,如果您更喜欢显式使用bind运算符:

import           Control.Monad    (filterM)
import           System.Directory (doesDirectoryExist, listDirectory)
import           System.FilePath  ((</>))

getDirectories :: FilePath -> IO [FilePath]
getDirectories filePath = listDirectory filePath
                      >>= filterM (doesDirectoryExist . (filePath </>))

注意:您使用的函数版本将把输入的文件路径返回到列表中每个输出目录的前面。尽管这可能是您想要的,但getDirectories我给您的版本可能会更通用,因为它的行为完全像,listDirectory并且只是修剪文件/可执行文件。

编辑:从改变了进口System.FilePath.Posix,以System.FilePath实现真正的平台独立性。感谢贾斯汀·雷蒙德的建议。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章