getAbsDirectoryContents

getAbsDirectoryContents

有没有一种方法可以返回目录及其绝对路径的文件列表。

当我做

getDirectoryContents dir

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

最佳答案

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.(</>),可能会快一点。

10-08 04:15