Haskell中的目录内容

atl*_*tis 15 haskell filepath

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

当我做

getDirectoryContents dir
Run Code Online (Sandbox Code Playgroud)

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

ehi*_*ird 16

getAbsDirectoryContents :: FilePath -> IO [FilePath]
getAbsDirectoryContents dir =
  getDirectoryContents dir >>= mapM (canonicalizePath . (dir </>))
Run Code Online (Sandbox Code Playgroud)

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

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

getAbsDirectoryContents :: FilePath -> IO [FilePath]
getAbsDirectoryContents dir = map (dir </>) <$> getDirectoryContents dir
Run Code Online (Sandbox Code Playgroud)

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

  • 可能值得注意的是,要使此解决方案起作用,您需要导入System.FilePath(</>)和Data.Functor(<$>) (2认同)