絶対パスでディレクトリ内のファイルのリストを返す方法はありますか?私はHaskellのディレクトリの内容
getDirectoryContents dir
を行うと
それは私に、ディレクトリ内のファイル名のリストを与えます。これらのファイル名を別の場所で使用している場合は、絶対パスまたは現在の作業ディレクトリに対する相対パスを知る必要があります。
絶対パスでディレクトリ内のファイルのリストを返す方法はありますか?私はHaskellのディレクトリの内容
getDirectoryContents dir
を行うと
それは私に、ディレクトリ内のファイル名のリストを与えます。これらのファイル名を別の場所で使用している場合は、絶対パスまたは現在の作業ディレクトリに対する相対パスを知る必要があります。
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.(</>)を使用し、少し速くなる可能性があります。
import System.Directory (getDirectoryContents)
import System.FilePath ((</>))
getAbsoluteDirContents :: String -> IO [FilePath]
getAbsoluteDirContents dir = do
contents <- getDirectoryContents dir
return $ map (dir </>) contents
は、このソリューションのために働くことは注目に値するかもしれないが、あなたはSystem.FilePath(>)とData.Functor(<$>)をインポートする必要があります –