有没有办法用绝对路径返回目录中的文件列表。
当我这样做时
getDirectoryContents dir
它为我提供了目录中的文件名列表。如果我在其他地方使用这些文件名,我需要知道它们的绝对路径或相对于当前工作目录的路径。
答案 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