wvogel日記

自分用の技術備忘録が多めです.

Directory

password管理をHaskellで書いてから、やっぱり実際に使えそうなもの書くのが一番楽しいなあー、と思った私。

なので、今頑張ってsuffix array勉強して検索エンジンを作ろうかと企んだりしているわけですが。

そうだ、ファイル検索作ろう!
と思い立つ。
調べてみると、
Directoryモジュールとかいう便利なものがあるんですね

import Directory
import Control.Monad

main = do list <- (getDirectoryContents ".")
          forM_ list putStrLn

これだけで、カレントディレクトリ内のファイル表示が出来てしまったよ。
さ、これをいじっていくか


あと、なんか面白くなったので、Linuxコマンド、mkdirを作ってみた

import Directory
main = getLine >>= createDirectory

二行でフォルダが作れちゃう

そして、rmのrecursiveバージョン

import Directory

main = getDirectoryContents "."
          >>= (\flist -> (getLine>>=rm flist))

rm :: [FilePath] -> FilePath -> IO()
rm flist f = case any (==f) flist of
              True -> removeDirectory f
              False-> putStrLn $f++" is not exist...\n"

これで、フォルダを消すことができます。
よく考えたら、getLineではなく
getArgsにすれば、よりコマンドっぽいのにね.....


ただ、これではフォルダは消せるけれどファイルを消すことはできません。
Hoogleで調べたら、removeDiretcoryRecursiveという関数があるんですが、ghciで調べても入ってる様子はないし、
そもそも、
removeDiretcoryで、ファイルではなくフォルダが消せる時点でおかしいような?


とにかく!
このへんの関数をうまく使ってやれば、ファルダ検索・管理プログラムを組めそうです。
どういう風に組むか全然考えていないんだけれども笑