Function OPEN

UP


Function OPEN

Function OPEN

構文

open filespec &key direction element-type if-exists if-does-not-exist external-format
=> stream

引数と戻り値

filespec - パス名指定子
direction - :input, :output, :io, :probeのどれか。 デフォルトは:input
element-type - characterとして認識可能なサブタイプの型指定子か、 整数の有限値として認識可能なサブタイプの型指定子か、 シンボルであるsigned-byte, unsigned-byteのうちのひとつか、 あるいは:default。 デフォルトはcharacter
if-exists - :error, :new-version, :rename, :rename-and-delete, :overwrite, :append, :supersede, nilのどれか。 デフォルトは、filespecのバージョンの要素が:newestのときは:new-version、 それ以外のときは:error
if-does-not-exist - :error, :create, nilのどれか。 デフォルトは、もしdirection:inputであるか if-exists:overwrite:appendのときは:errordirection:output:ioでありかつ if-exists:overwriteでも:appendでもないときは:createdirection:probeのときはnil
external-format - 外部ファイルフォーマット指定子。デフォルトは:default
stream - ファイルストリームか、nil

定義

openは、filespecによって指定されたファイルと接続した ファイルストリームを作成し、開き、返却します。 filespecは開かれるファイルの名前です。 もしfilespec指定子がストリームのとき、 そのストリームは最初に閉じられたり、 あるいはその他の影響を受けることはありません。

openのキーワード引数は、 返却されるファイルストリームの特性と、 どのようにエラーを扱うかを指定します。

direction:input:probeのときか、 あるいはif-exists:new-versionではなく 同時にfilespecのバージョン要素が:newestのときは、 開かれたファイルはすでにファイルシステム内に存在しているので、 そのバージョンはファイルシステム内の、 他のパス名の要素がfilespecと同じである 他のどんなファイルのものより大きなバージョンになります。

実装はopenの全てのキーワードオプションを識別し、 ホストオペレーティングシステムの構造上で 適切な処理を行うよう要求されます。 例えば、もしファイルシステムが ファイルのバージョンの区別をサポートせず、 さらに削除と抹消(deletingexpunging)の表記を区別できないとき、 :new-version:rename:supersedeと同じように扱われ、 :rename-and-delete:supersedeと同じように扱われることが考えられます。

ファイルが開かれたとき、 ファイルストリームは Lisp環境においてファイルシステムに仕える代理人として構築され、 ファイルストリームへの操作は 対象のファイルシステム内の指定したファイル上の操作として反映されます。

ファイルはopenによって、削除、名前の変更、破壊的な修正が行われます。

openとパス名の関係については、19.2.3. パス名のマージをご確認ください。

例文

(open filespec :direction :probe)  =>  #<Closed Probe File Stream...>
(setq q (merge-pathnames (user-homedir-pathname) "test"))
=>  #<PATHNAME :HOST NIL :DEVICE device-name :DIRECTORY directory-name
   :NAME "test" :TYPE NIL :VERSION :NEWEST>
(open filespec :if-does-not-exist :create) =>  #<Input File Stream...>
(setq s (open filespec :direction :probe)) =>  #<Closed Probe File Stream...>
(truename s) =>  #<PATHNAME :HOST NIL :DEVICE device-name :DIRECTORY
   directory-name :NAME filespec :TYPE extension :VERSION 1>
(open s :direction :output :if-exists nil) =>  NIL 

影響

ホストコンピューターのファイルシステムの性質と状態

例外

if-exists:errorのとき (上記のリストにあるif-existsの意味の制約に従い)、 型file-errorのエラーが発生します。

if-does-not-exist:errorのとき (上記のリストにあるif-does-not-existの意味の制約に従い)、 型file-errorのエラーが発生します。

ここで指定された何かの挙動において 実装が何らかのオプションを処理できなかったときは、 型errorのエラーが通知されるかもしれません。

(wild-pathname-p filespec)trueのとき、 型file-errorのエラーが発生します。

実装がexternal-formatを解釈できなかったときは、 型errorのエラーが発生します。

現在存在する様々なファイルシステムは大きく異なった機能を持っており、 あるファイルシステムの様相はここで定義された仕様の範囲を超えています。 実装はこれらの全てのオプションについて 規定された動作を正確にサポートできないかもしれません。 実装はこれらの全てのキーワードオプションを認識し、 ホストファイルシステムの環境上において 「適切な」何らかの挙動を試行することが求められます。 ファイルシステムに適合させるために必要であれば、 実装はここで指定された意味からわずかに逸脱しても、 仕様に適合した実装として失格とみなされることはありません。 もし、あるオプションをここで指定されたものと同様の方法で処理することが 実装上まったく不可能な場合は、単にエラーが通知されます。

:element-typeオプションに関して、 ファイルシステムでサポートされていない型が指定されたとき、 そのような型をアップグレードした型を代用することが許されます。 最小の要求としては、 あるファイルに対して指定した要素の型で出力ストリームを開き、 後で同じファイルに対して同じ要素の型で入力ストリームを開いたときに 矛盾なく動作することが求められます。

参考

with-open-file, close, pathname, logical-pathname, 19.2.3. パス名のマージ, 19.1.2. ファイル名としてのパス名

備考

openは、異常な退出が生じたときに 自動的にはファイルをクローズしません。

element-typecharacterのサブタイプのとき、 read-charwrite-charが結果のファイルストリームで使用できます。

element-typeが整数のサブタイプのとき、 read-bytewrite-byteが結果のファイルストリームで使用できます。

element-type:defaultのとき、 その型はstream-element-typeを使うことで決定することができます。


TOP, Github