有没有办法用它们的绝对路径返回目录中的文件列表.
当我做
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.(</>),可能会更快一些.