2011-12-20 20 views
15

¿Hay alguna manera de devolver una lista de archivos en un directorio con sus rutas absolutas?Contenido del directorio en Haskell

Cuando hago

getDirectoryContents dir 

Me da una lista de nombres de archivo en el directorio. Si utilizo estos nombres de archivo en otro lugar, necesito conocer sus rutas absolutas o las rutas relativas al directorio de trabajo actual.

Respuesta

16
getAbsDirectoryContents :: FilePath -> IO [FilePath] 
getAbsDirectoryContents dir = 
    getDirectoryContents dir >>= mapM (canonicalizePath . (dir </>)) 

Esto utiliza System.Directory.canonicalizePath, y funciona incluso si dir no es una ruta absoluta (por ejemplo, si se llama a getAbsDirectoryContents "foo" y luego trasladarse a otro lugar en el sistema de archivos).

Si sabe que dir es una ruta absoluta, en su lugar puede utilizar:

getAbsDirectoryContents :: FilePath -> IO [FilePath] 
getAbsDirectoryContents dir = map (dir </>) <$> getDirectoryContents dir 

que utiliza System.FilePath.(</>), y podría ser un poco más rápido.

+1

podría valer la pena señalar que para esta solución funcione, es necesario importar System.FilePath () y Data.Functor (<$>) –

3
import System.Directory (getDirectoryContents) 
import System.FilePath ((</>)) 

getAbsoluteDirContents :: String -> IO [FilePath] 
getAbsoluteDirContents dir = do 
    contents <- getDirectoryContents dir 
    return $ map (dir </>) contents 
Cuestiones relacionadas