有没有一种方法可以返回目录及其绝对路径的文件列表。
当我做
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.(</>),可能会快一点。