如何获取目录中的目录列表?
我提出了以下建议,但我希望有一种更优雅的方法:
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] 删除。
我来说两句