Содержимое каталога в Haskell

Есть ли способ вернуть список файлов в каталоге с их абсолютными путями.

Когда я делаю

getDirectoryContents dir

это дает мне список имен файлов в каталоге. Если я использую эти имена файлов в другом месте, мне нужно знать их абсолютные пути или пути относительно текущего рабочего каталога.


person atlantis    schedule 20.12.2011    source источник


Ответы (1)


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.(‹/›) и может быть немного быстрее.

person ehird    schedule 20.12.2011
comment
Возможно, стоит отметить, что для работы этого решения вам необходимо импортировать System.FilePath (‹/›) и Data.Functor (‹$›) - person Jon Gjengset; 19.02.2012