Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-07-29

KMRCLを眺める(182) DELETE-DIRECTORY-AND-FILES

| 23:28 | KMRCLを眺める(182) DELETE-DIRECTORY-AND-FILES - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(182) DELETE-DIRECTORY-AND-FILES - わだばLisperになる

今回は、KMRCLのos.lispから DELETE-DIRECTORY-AND-FILES です。

Allegro CLだと同名の関数があり、処理系にディレクトリを削除する機能があるようですが、他の処理系の場合はKL:COMMAND-OUTPUTを使って、rm -rfするようです。

定義は、

(defun delete-directory-and-files (dir &key (if-does-not-exist :error) (quiet t) force)
  #+allegro (excl:delete-directory-and-files dir :if-does-not-exist if-does-not-exist
                                             :quiet quiet :force force)
  #-(or allegro) (declare (ignore force))
  #-(or allegro) (cond
                   ((probe-directory dir)
                    (let ((cmd (format nil "rm -rf ~A" (namestring dir))))
                      (unless quiet
                        (format *trace-output* ";; ~A" cmd))
                      (command-output cmd)))
                   ((eq if-does-not-exist :error)
                    (error "Directory ~A does not exist [delete-directory-and-files]." dir))))

となっています。

動作は、

(KL:DELETE-DIRECTORY-AND-FILES "/tmp/bar")
;⇒ ""
    ""
    0
;; 権限不足で削除できなかった場合
;⇒ ""
    "rm: ディレクトリ`/tmp/bar/baz/quux'を削除できません: Permission denied
    "
    1

というところ

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20100729