2011-12-20 13 views
15

絶対パスでディレクトリ内のファイルのリストを返す方法はありますか?私はHaskellのディレクトリの内容

getDirectoryContents dir 

を行うと

それは私に、ディレクトリ内のファイル名のリストを与えます。これらのファイル名を別の場所で使用している場合は、絶対パスまたは現在の作業ディレクトリに対する相対パスを知る必要があります。

答えて

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

は、このソリューションのために働くことは注目に値するかもしれないが、あなたはSystem.FilePath()とData.Functor(<$>)をインポートする必要があります –

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

getAbsoluteDirContents :: String -> IO [FilePath] 
getAbsoluteDirContents dir = do 
    contents <- getDirectoryContents dir 
    return $ map (dir </>) contents 
関連する問題