使う機会があったので備忘録.
https://github.com/fare/asdf/blob/master/uiop/stream.lisp に実装されて いる.
with-temporary-file
は,一時ファイルを作成してシンボルにパス名かスト
リームを束縛する. :stream
か :pathname
かのどちらかを少なくとも受け取らなければならない.
処理の完了後は、自動的にファイルが閉じられる.
(with-temporary-file (:stream s :pathname p) ...)
&key | description |
---|---|
:stream |
一時ファイルへのストリームが束縛される |
:pathname |
一時ファイルへのパスが束縛される |
:keep |
評価後もファイルを残すか |
:prefix /:suffix |
一時ファイルの接頭辞/接尾辞 |
:directory |
一時ファイルの保存先(絶対パス,Linuxはデフォルトで/tmp ) |
:type |
一時ファイルの拡張子(デフォルトではtmp ) |
:direction |
一時ファイルの開き方(:io :input :output のいずれか) |
bodyが実行された後に:keep
に対応する式が評価される.これがt
と評価されなければ,一時
ファイルは削除される.デフォルトではnil
.
(uiop:with-temporary-file (:stream s :pathname p :keep t) (format t "path is ~a~%" p) (format s "hello, temporary file!")) path is /tmp/tmpVA1K97E4.tmp NIL
$ cat /tmp/tmpVA1K97E4.tmp hello, temporary file!%
:keep
を指定しない場合は,式の終了後にファイルは消えてしまう.
(uiop:with-temporary-file (:stream s :pathname p) (format t "path is ~a~%" p) (format s "hello, temporary file!")) path is /tmp/tmp70D3CAC9.tmp NIL
$ cat /tmp/tmp70D3CAC9.tmp cat: /tmp/tmp70D3CAC9.tmp: そのようなファイルやディレクトリはありません
:prefix
を指定するとファイル名にprefixがつく.:suffix
も指定できる.
(uiop:with-temporary-file (:stream s :pathname p :prefix "piyo") (format t "path is ~a~%" p) (format s "hello, temporary file!")) path is /tmp/piyoAITYOLR9.tmp NIL
:directory
を指定すると,一時ファイルの作成先をデフォルトのディレクトリから変更できる.
(uiop:with-temporary-file (:stream s :pathname p :prefix "piyo" :directory "/tmp/hoge") (format t "path is ~a~%" p) (format s "hello, temporary file!")) path is /tmp/hoge/piyoW2BJXM5B.tmp NIL
ディレクトリがないときは自動的に新規作成されるが,削除は行わない.