
Thanks for your reply. and I have done it by:
import System.IO
import System.Posix
import System.Directory
show_current_dir :: IO ()
show_current_dir = do
curr_dir <- getWorkingDirectory
putStrLn ("Current Working Directory:" ++ curr_dir)
ls_dir1 :: String -> IO [()]
ls_dir1 fp = do
files <- getDirectoryContents fp
putStrLn ("ls_dir1: Files in " ++ fp ++ ":")
mapM putStrLn files
read_fp_from_DirStream :: DirStream -> IO()
read_fp_from_DirStream dp = do
f <- readDirStream dp
if f == "" then return () else do putStrLn f
read_fp_from_DirStream dp
ls_dir2 :: String -> IO ()
ls_dir2 fp = do
dp <- openDirStream fp
putStrLn ("ls_dir2: files in " ++ fp ++ ":")
read_fp_from_DirStream dp
closeDirStream dp
main :: IO ()
main = do
putStrLn "Unix programming use Haskell"
show_current_dir
ls_dir1 "/"
ls_dir2 "/home"
-- is that right?
2007/4/9, Alec Berryman
Albert Lee on 2007-04-09 10:46:14 +0800:
I want to ls the filenames of a directory.
[...]
and I write that in haskell:
----- import System.Posix import System.IO
main = do dp <- openDirStream "/" df <- readDirStream dp putStrLn df closeDirStream dp
------ It can print the first entry of the dir, but how can we list it all like the C prog? map ? list comperhension?
System.Posix is one way to do it, but you might find the functions in System.Directory easier to use - there's a function to get the directory contents as a list of strings. To print them out, you may want to look at one of the mapM functions. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe