Next: , Previous: , Up: Files   [Contents][Index]


24.4 Writing to Files

関数append-to-fileおよびwrite-regionを使用することにより、ディスク上のファイルに直接、バッファーのコンテンツ、またはバッファーの一部を書き込むことができます。visitされているファイルに書き込むために、これらの関数を使用しないでください。これにより、visitにたいするメカニズムが混乱するかもしれません。

Command: append-to-file start end filename

この関数は、カレントバッファー内で、startendによるリージョンのコンテンツを、ファイルfilenameの終端に追加する。そのファイルが存在しない場合は作成する。この関数はnilをリターンする。

filenameに書込不可能なファイル、またはファイルを作成不可なディレクトリー内の存在しないファイルを指定した場合は、エラーがシグナルされる。

Lispから呼び出した場合、この関数は以下と完全に等価である:

(write-region start end filename t)
Command: write-region start end filename &optional append visit lockname mustbenew

この関数は、カレントバッファー内のstartendで区切られたリージョンを、filenameで指定されたファイルに書き込む。

startnilの場合、このコマンドはバッファーのコンテンツ全体(アクセス可能な範囲だけではない)をファイルに書き込み、endは無視する。

startが文字列の場合、write-regionはバッファーのテキストではなく、その文字列を追加する。その場合、endは無視される。

appendが非nilの場合は、指定されたテキストが(もしあれば)既存のファイルコンテンツに追加される。appendが数字の場合、write-regionはファイル開始位置からそのバイトオフセットをseekして、データをそこに書き込む。

mustbenewが非nilの場合、write-regionはもしfilenameが既存ファイルの名前なら確認を求める。mustbenewがシンボルexclなら、ファイルがすでに存在する場合はwrite-regionは確認を求めるかわりに、エラーfile-already-existsをシグナルする。

mustbenewexclのときは、存在するファイルのテストに特別なシステム機能を使用する。少なくともローカルディスク上のファイルにたいしては、Emacsがファイルを作成する前に、Emacsに通知せずに他のプログラムが同じ名前のファイルを作成することはありえない。

visittの場合、Emacsはバッファーとファイルの関連付けを設定し、そのバッファーがそのファイルをvictimする。また、カレントバッファーにたいする最終ファイル変更日時にfilenameをセットして、そのバッファーを未変更としてマークする。この機能はsave-bufferにより使用されるが、おそらくあなた自身が使用するべきではないだろう。

visitが文字列の場合、それはvisitするファイルの名前を指定する。この方法を使えば、そのバッファーが別のファイルをvisitしていると記録しつつ、1つのファイル(filename)にデータを書き込むことができる。引数visitは、エコーエリアに使用される他に、ファイルのロックにも使用され、visitbuffer-file-nameに格納される。この機能は、file-precious-flagの実装に使用される。自分が何をしているか本当にわかっているのでなければ、これを使用してはならない。

オプション引数locknameが非nilの場合、それはロックとアンロックの目的に使用する、filenameおよびvisitをオーバーライドするファイル名を指定する。

関数write-regionは、書き込むデータをbuffer-file-formatにより指定される、適切なファイルフォーマットに変換しするとともに、リストwrite-region-annotate-functions内の関数の呼び出しも行う。Format Conversionを参照のこと。

通常、write-regionはエコーエリア内にメッセージ‘Wrote filename’を表示する。visittnil、文字列のいずれでもない場合、このメッセージは抑制される。この機能は、内部的な目的のために、ユーザーが知る必要がないファイルを使用する場合に有用である。

Macro: with-temp-file file body…

with-temp-fileマクロは、一時バッファー(temporary buffer)をカレントバッファーとしてbodyフォームを評価して、最後にそのバッファーのコンテンツをfileに書き込む。これは終了時に一時バッファーをkillして、with-temp-fileフォームの前にカレントだったバッファーをリストアする。その後、body内の最後のフォームの値をリターンする。

throwやエラーによる異常なexit(abnormal exit)でも、カレントバッファーはリストアされる(Nonlocal Exitsを参照)。

The Current Bufferwith-temp-bufferも参照のこと。