Haskell中的目录内容

时间:2011-12-20 07:43:57

标签: haskell filepath

有没有办法用绝对路径返回目录中的文件列表。

当我这样做时

getDirectoryContents dir

它为我提供了目录中的文件名列表。如果我在其他地方使用这些文件名,我需要知道它们的绝对路径或相对于当前工作目录的路径。

2 个答案:

答案 0 :(得分:16)

getAbsDirectoryContents :: FilePath -> IO [FilePath]
getAbsDirectoryContents dir =
  getDirectoryContents dir >>= mapM (canonicalizePath . (dir </>))

这使用System.Directory.canonicalizePath,即使dir不是绝对路径也是有效的(例如,如果您调用getAbsDirectoryContents "foo"然后移动到文件系统中的其他位置)。

如果您知道dir是绝对路径,则可以使用:

getAbsDirectoryContents :: FilePath -> IO [FilePath]
getAbsDirectoryContents dir = map (dir </>) <$> getDirectoryContents dir

使用System.FilePath.(</>),可能会更快一些。

答案 1 :(得分:3)

import System.Directory (getDirectoryContents)
import System.FilePath ((</>))

getAbsoluteDirContents :: String -> IO [FilePath]
getAbsoluteDirContents dir = do
  contents <- getDirectoryContents dir
  return $ map (dir </>) contents