gpt4 book ai didi

Haskell 获取目录中的目录

转载 作者:行者123 更新时间:2023-12-02 10:18:40 25 4
gpt4 key购买 nike

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

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

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,以实现真正的平台独立性。感谢Justin Raymond寻求建议。

关于Haskell 获取目录中的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44086778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com