ディレクトリの作成にはensure-directories-existを使います。指定されたディレクトリが存在しない場合には作成されます。以下の様にすると/tmpの下にfooもbarも続けて作ってくれるので便利です。
CL-USER> (ensure-directories-exist (make-pathname :directory '(:absolute "tmp" "foo" "bar"))) #P"/tmp/foo/bar/" T
きちんとmake-pathnameでパスネームを渡してやらないとおかしなことになりそうです。ubuntu + sbclで以下の様にやってみると…
CL-USER> (ensure-directories-exist "/tmp/hoge/huga") "/tmp/hoge/huga" T
/tmpの下にhogeが作られました。他のOSや処理系では/tmpの下に'hoge/huga'というディレクトリが作られたりしそうですね。今度Windowsでやってみます。
Cでforとgetcharを使ったようなループはCommonLispでは
(with-open-file (ist "hoge.txt")
(loop for c = (read-char ist nil) while (characterp c) do
( …何かする… )))みたいな感じ。
上記はテキストファイル(ubuntu+sbclだとUTF-8に対応しているので漢字も読めます)の場合で、バイナリの場合は入力用のストリーム(ist)を束縛している部分とloopのcharacterpで終了を判定している部分を書き換える必要がある。
(read-char ist nil)の様にnilを指定するとファイルの終端に達した場合にnilを返します。(通常はerrorとなる)